2014年9月30日
摘要:
编写一个函数,检查链表是否是回文。分析:一种办法是使用数组保存链表中的每个元素,然后从两端进行判断。时间复杂度O(n),空间复杂度O(n)。另外,可以使用快慢指针,找到链表的中间结点,然后将链表的后半部分反转,再逐次进行比较判断。
阅读全文
posted @ 2014-09-30 22:44
游不动の鱼
阅读(104)
推荐(0)
摘要:
给定一个有环链表,实现一个算法返回环路的开头结点。有环链表的定义在链表中某个结点的next元素指向在它前面出现过的结点,则表明该链表存在环路。示例输入:A -> B -> C -> D -> E -> C (C结点出现了两次)输入:C分析:http://www.cnblogs.com/moderat...
阅读全文
posted @ 2014-09-30 22:22
游不动の鱼
阅读(136)
推荐(0)
摘要:
给定两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例输入:( 7 -> 1 -> 6 ) + ( 5 -> 9 -> 2 ),即 617 + 295输出:2 -> 1 -> 9,即 912进阶假设这些数位是...
阅读全文
posted @ 2014-09-30 22:04
游不动の鱼
阅读(268)
推荐(0)
2014年9月19日
摘要:
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或者等于x的结点之前。分析:使用两个链表,若当前结点小于x,则将其插入第一个链表的尾部;否则,将其插入第二个链表的尾部。最后,将两个链表拼接即可。 1 //struct Node { 2 // Node(): val(0),...
阅读全文
posted @ 2014-09-19 22:58
游不动の鱼
阅读(409)
推荐(0)
2014年9月18日
摘要:
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。示例输入:单向链表a->b->c->d->e中的结点c。结果:不返回任何数据,但该链表变为:a->b->d->e。分析:因为无法访问待删除结点的前继结点,所以只能通过复制将后续链表整体向前移动一个位置,并删除最后一个多余的结点。显然,当...
阅读全文
posted @ 2014-09-18 22:11
游不动の鱼
阅读(167)
推荐(0)
摘要:
实现一个算法,找出单向链表中倒数第k个结点。分析:使用相差k个位置的两个指针,以相同的速度遍历链表,当快指针为空时,慢指针刚好指向链表的倒数第k个结点。时间复杂度O(n),空间复杂度O(1)。 1 #include 2 #include 3 #include 4 5 using namesp...
阅读全文
posted @ 2014-09-18 21:32
游不动の鱼
阅读(171)
推荐(0)
摘要:
编写代码,移除未排序链表中的重复结点。进阶如果不得使用临时缓冲区,该怎么解决?分析:使用set记录已访问过的值。时间复杂度O(n*logn),若使用unordered_set或者hash_set,则时间复杂度为O(n)。 1 #include 2 #include 3 #include 4 #...
阅读全文
posted @ 2014-09-18 21:11
游不动の鱼
阅读(158)
推荐(0)
2014年9月14日
摘要:
假定有一个方法isSubstring,可检查一个单词是否为其他字符串的字串。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次isSubstring。(比如,waterbottle是erbottlewat旋转后的字符串。)分析:将两个s1拼接起来,调用isSubstri...
阅读全文
posted @ 2014-09-14 20:50
游不动の鱼
阅读(130)
推荐(0)
摘要:
编写一个算法,若MXN矩阵中某个元素为0,则将其所在的行和列清零。分析:见 http://www.cnblogs.com/moderate-fish/p/3932591.html
阅读全文
posted @ 2014-09-14 20:39
游不动の鱼
阅读(105)
推荐(0)
摘要:
给定一幅NXN矩阵表示的图像,其中每个像素的大小为4字节,编写一个方法,将图像旋转90度。不占用额外内存空间能否做到?分析:此处假设对图像做顺时针旋转。对于image[i][j],其顺时针旋转角度与对应点坐标分别为:90度--image[j][n-i-1], 180度--image[n-i][n-j...
阅读全文
posted @ 2014-09-14 20:34
游不动の鱼
阅读(176)
推荐(0)