上一页 1 2 3 4 5 6 7 8 ··· 11 下一页
摘要: Q:如何判断一个单链表是否有环,如果有环,找出环的入口点?A:首先我们判断链表是否有环,设置两个指针slow和fast,指向单链表的头部,每个循环slow走一步,fast走两步。如果没有环,fast或者fast的next会走到NULL,否则fast在环里循环最终会和slow相遇,此时即存在环。再看第二个问题,当slow和fast相遇时,假设fast已经在环内循环n圈,环长为r,同时fast走的长度为slow走的长度的两倍,设slow走了s步,则有2*s=s+n*r => s=n*r,再设单链表头部到环入口的距离为a,环入口到相遇点得距离为x,则a+x=s=n*r,因此从单链表头部到相遇点 阅读全文
posted @ 2012-06-18 13:44 Cavia 阅读(383) 评论(0) 推荐(0) 编辑
摘要: Q:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。A:将数组的每一个元素进行异或,得到的两个不同数字之间的异或,因为这两个数字不同,所以异或值必然不为0,所以我们找出异或值的一个为1的数位,按照该数位是否为0将数组分成两个子数组A和B,可以知道数组A含有的元素中有两个不同数字的一个,其他都是两两相同的数字;数组B含有的元素中有两个不同数字的另外一个,其他也都是两两相同的数字,再分别进行异或,即可求得两个数。 1 #include <iostream> 2 using namespace s 阅读全文
posted @ 2012-06-18 10:14 Cavia 阅读(3461) 评论(0) 推荐(0) 编辑
摘要: Q:输入一个字符串,输出该字符串中字符的所有组合。 A:假设一个字符串长度为n,要求长度为m的所有组合。我们考虑字符串中一个字符,我们有两种选择:将其加入组合或者不加入组合。当加入组合时,我们还需要从该字符后面的子串中选取m-1个字符;当不加入组合时,我们需要从该字符后面的子串中选取m个字符,所以递归+回溯即可解出。 #include <iostream>#include <vect... 阅读全文
posted @ 2012-06-14 20:07 Cavia 阅读(453) 评论(0) 推荐(0) 编辑
摘要: Q:输入一个字符串,打印出该字符串中字符的所有排列 A:以abc为例,我们首先将a固定在第一位,然后排列bc,当bc排列完成后,我们会将b固定在第一位,也就是交换a和b的位置,变成bac,然后排列ac,当ac排列完成后,我们需要将c固定在第一位,先将a和b的位置复原,在交换a和c的位置即可。因此,用递归来求解再自然不过。对于字符串abcdedfgh….,在以begin为开头的子串中,我们要... 阅读全文
posted @ 2012-06-14 19:45 Cavia 阅读(1012) 评论(0) 推荐(0) 编辑
摘要: 从低地址到高地址依次为代码段,数据段,bss段,堆,栈,命令行参数和环境变量,其中的那些段来源于elf文件(bss段并不存储在elf文件中);另外,可以看出,栈向低地址生长,而堆向高地址生长。 阅读全文
posted @ 2012-06-14 15:35 Cavia 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 每一个程序都会接收到一张环境表,与参数表一样,环境表也是一个字符指针数组,其中每个指针包含一个以null结束的C字符串的地址。全局变量environ包含了该指针数组的地址:extern char **environ;我们称environ为环境指针。环境由name=value这样的键值对组成,大多数预定义的名字完全由大写字母组成,但这只是一个惯例。ISO C定义了一个函数getenv,可以用其取环境变量1 #include <stdlib.h>2 3 //返回值:指向与name关联的value的指针,若未找到则返回NULL4 char* getenv(const char* name 阅读全文
posted @ 2012-06-14 15:29 Cavia 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2012-06-14 15:13 Cavia 阅读(167) 评论(0) 推荐(0) 编辑
摘要: Q:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5} 是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。 A:任意将这个数组从中间分开,分成两个数组,则至少有一个数组单调递减,另一个数组则可以由递减数组左移若干位得到,所以我们在二分之后确定界限的时候必须考虑所有情况,即需要查找的数组在哪一个分区里。 首先我们需要判断哪一个分区是单调递减的... 阅读全文
posted @ 2012-06-11 20:57 Cavia 阅读(990) 评论(0) 推荐(0) 编辑
摘要: #include <iostream>using namespace std;//匹配数int num=0;//判断当前n对括号是否匹配bool isMatch(int n,char* bracket){ int left_num=0,right_num=0; for(int i=0;i<2*n;++i) { if(bracket[i]=='l') left_num++; else if(... 阅读全文
posted @ 2012-06-11 19:42 Cavia 阅读(2223) 评论(0) 推荐(0) 编辑
摘要: 1、求有向图的强连通分量 如果有向图G中的任何两个顶点都相互可达,则G称为一个强连通图。非强连通图的极大强连通子图称为有向图的强连通分量。 Tarjan算法是根据图的深度优先搜索,定义DFN(u)为顶点u在DFS中的次序编号,Low(u)为u或u的子树能够追溯到的最早的栈中顶点的次序编号,则 Low(u)=min{DFN(u),Low(v) if(u,v)是树枝边,DFN(v) if(... 阅读全文
posted @ 2012-06-08 11:32 Cavia 阅读(3879) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 11 下一页