摘要:
问题描述: 两个单向链表,可能存在公共节点。如何判断是否存在公共节点,并找出它们的第一个公共结点。分析: 要注意到,单向链表右公共节点,实际上两个链表会组成一个Y型的结构,而不是交叉。第一种: 循环比较...O(n^2)第二种:O(n) 可以看到,两个链表的后半部分是相同的,不妨设链表为L1和L2,L1为10个节点,L2为7个节点。假设L1和L2相交,那么L1和L2的后半部分应该是相同的,现在的问题是怎么找到开始的交点? 首先,把链表剪切到一样长(依据短的链表剪切...)(这一步很重要,为什么需要剪切,原因暂时还无法证明...) 然后,比较两个链表的后继指针,如果相同则说明有交点.....
阅读全文
posted @ 2012-04-09 17:05
笔记吧... 可能只有自己看得懂
阅读(1633)
推荐(0)
编辑
摘要:
描述:微软面试题:将一个句子按单词反序将一个句子按单词反序。比如 “hi baidu com mianshiti”,反序后变为 “mianshiti com baidu hi”。分析:一般的想法,把所有的字符反转,然后把单个的单词再次反转。。。提供两种代码:纯c和stl版View Code 1 #include <iostream> 2 using namespace std; 3 4 char * Reverse(char *p) 5 { 6 int len =strlen(p); 7 if(len == 0) 8 { 9 cout << "字符...
阅读全文
posted @ 2012-04-09 16:44
笔记吧... 可能只有自己看得懂
阅读(1141)
推荐(0)
编辑
摘要:
编程实现两个正整数的除法,当然不能用除法操作符。// return x/y.int div(const int x, const int y) {....}示例代码:View Code 1 #include <iostream> 2 using namespace std; 3 4 int div1(int x,int y) 5 { 6 if(0 == y) return -1; 7 8 int i = 0; 9 if(x < y) return i;10 int temp = y;11 while(x >= temp)12 {13 ...
阅读全文
posted @ 2012-04-09 15:31
笔记吧... 可能只有自己看得懂
阅读(416)
推荐(0)
编辑
摘要:
题目描述: 数组 int a[] = {-4 , 3 ,56 , -15 , 34 , 0 , -14 , 4} ; 某几个连续的子序列其和最大,比如a0+a1 = -1 。a1+a2+a3+a4 = 78 。则[a1 a2 a3 a4]组成的数组即是所求。分析: 如果能够找到每个位置结束的最大连续子串和,那么保留最大的和就能解决问题。当然,也可以找到每个位置开始的最大连续子串和,其实这种的话就是把数组反转(其实还是求得以结束位置的最大连续子串和的意思),还是求解原来的问题。 重点:能够想到设计一个以第j处结束的子序列的最大和数组b[j]。(这样就能保证连续性,妙...)找出递推式: ...
阅读全文
posted @ 2012-04-09 11:57
笔记吧... 可能只有自己看得懂
阅读(2298)
推荐(1)
编辑