摘要:
原题地址二分搜索变种先按行搜索,然后按列搜索代码: 1 bool searchMatrix(vector > &matrix, int target) { 2 if (matrix.empty() || matrix[0].empty()) return false; 3 4 int m ... 阅读全文
posted @ 2015-01-28 15:10
李舜阳
阅读(155)
评论(0)
推荐(0)
摘要:
原题地址用矩形的第一行和第一列充当mask代码: 1 void setZeroes(vector > &matrix) { 2 if (matrix.empty() || matrix[0].empty()) return; 3 4 bool fir... 阅读全文
posted @ 2015-01-28 14:54
李舜阳
阅读(136)
评论(0)
推荐(0)
摘要:
原题地址二分搜索变种代码: 1 vector searchRange(int A[], int n, int target) { 2 vector range(2, -1); 3 int l, r; 4 5 // left 6 ... 阅读全文
posted @ 2015-01-28 14:43
李舜阳
阅读(141)
评论(0)
推荐(0)
摘要:
原题地址经典的链表题目。1. 用双指针法判断是否有环2. 将一个指针重置为链表首部,另一个指针保留在之前重合的位置,两个指针同时移动,相遇位置即为环出现的位置2的证明:设链表头节点是A,环出现位置为B,快慢指针最终相遇位置为C,如下图所示设环的周长为p,则有:1. 快指针所走的路径长度为 L_fas... 阅读全文
posted @ 2015-01-28 14:25
李舜阳
阅读(222)
评论(0)
推荐(0)
摘要:
原题地址小心溢出。检测乘法溢出的方法:设乘数为A、B,乘积为C,检验C / A =? B,前提是B != 0检测加法溢出的方法:检验A + B <? 0代码: 1 int sqrt(int x) { 2 int l = 0; 3 int r = x; 4 5 while (l <= r... 阅读全文
posted @ 2015-01-28 13:55
李舜阳
阅读(131)
评论(0)
推荐(0)
摘要:
原题地址二分搜索变种,注意到当左指针和右指针相交后,应该插入的位置总是在左指针处,所以直接返回左指针即可。代码: 1 int searchInsert(int A[], int n, int target) { 2 int l = 0; 3 int r = n - 1... 阅读全文
posted @ 2015-01-28 12:16
李舜阳
阅读(108)
评论(0)
推荐(0)
摘要:
原题地址经典链表题目,快慢指针法。曾经是面试热门题目之一,现在有些过时了。代码: 1 bool hasCycle(ListNode *head) { 2 ListNode *fast = head; 3 ListNode *slow = head; 4 ... 阅读全文
posted @ 2015-01-28 12:08
李舜阳
阅读(131)
评论(0)
推荐(0)
摘要:
原题地址最朴素的想法就是,枚举容器的左边界和右边界,总能找到解,不过时间复杂度是O(n^2)的。改进I:从左向右枚举左边界,在此基础上从右向左枚举右边界,一旦右边界高度>=左边界高度就可以停止枚举了,因为继续枚举下去找到的矩形肯定面积更小。比如下图,左边界在位置0,高度为height[0]=3,那么... 阅读全文
posted @ 2015-01-28 11:52
李舜阳
阅读(188)
评论(0)
推荐(0)
摘要:
原题地址与Word Break II(参见这篇文章)相比,只需要判断是否可行,不需要构造解,简单一些。依然是动态规划。代码: 1 bool wordBreak(string s, unordered_set &dict) { 2 int maxLen = 0; 3 f... 阅读全文
posted @ 2015-01-28 11:01
李舜阳
阅读(146)
评论(0)
推荐(0)

浙公网安备 33010602011771号