上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 43 下一页
摘要: 经过网上搜索,写出了个时间复杂度O(n),空间也O(n)的算法。据说空间可以优化到O(1),这个再表。做法是先从左向右扫一遍,然后再从右向左扫一遍。public class Solution { public int candy(int[] ratings) { int len = ratings.length; if (len == 0) return 0; int num[] = new int[len]; int cnt = 0; for (int i = 1; i ratings[i - 1]) { ... 阅读全文
posted @ 2013-10-09 15:27 阿牧遥 阅读(352) 评论(0) 推荐(0)
摘要: 此题难。我的解法采用的是O(n)的算法,就是两个指针,end向右走,如果可以,继续向右走,如不行,start向左走。这里的关键是,如果从start走到end,total是负数,那么从任意一个中间的节点出发到end,仍然不可行。因为按照这个走法,从start到中间任何一个节点,total都是正数;有这... 阅读全文
posted @ 2013-10-08 23:55 阿牧遥 阅读(638) 评论(0) 推荐(0)
摘要: 此题就是对32个位分别数1的个数,如果是3的倍数,那么所求数该位为0,否则该位为1。public class Solution { public int singleNumber(int[] A) { int ans = 0; for (int i = 0; i <... 阅读全文
posted @ 2013-10-08 00:10 阿牧遥 阅读(205) 评论(0) 推荐(0)
摘要: 见过。所以就用XOR就行了。public class Solution { public int singleNumber(int[] A) { int a = A[0]; for (int i = 1; i < A.length; i++) { a ^= A[i]; } return a; }} 阅读全文
posted @ 2013-10-07 23:57 阿牧遥 阅读(198) 评论(0) 推荐(0)
摘要: Clone Graph,采用BFS,同时用一个Map记录原先节点和现在节点的映射,顺便可以用来做visited check。一开始有两个错误,一是null的时候也要返回null,二是有可能节点0也有指向0本身的邻居,所以在对neighbors做遍历前要先放到map里。public class Solution { HashMap map = new HashMap(); public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { map.clear(); return cloneNo... 阅读全文
posted @ 2013-10-07 23:52 阿牧遥 阅读(655) 评论(0) 推荐(0)
摘要: 至此,终于把LeetCode Old OJ里的132题刷完了,小小的成就。此题算法简单,就是O(n^2),采用和Two Sum类似的做法就是了。我的代码略有麻烦之处,主要是在函数里判断了一次abs的差值,外面又判断了一次,但总体不影响。注意,先选定i,然后在i后面的元素做TwoSum,意思是当第一个元素是i时的结果,这样就不会重复。也有不需要子函数的写法,更简洁:http://www.cnblogs.com/graph/p/3343847.htmlpublic class Solution { public int threeSumClosest(int[] num, int targe... 阅读全文
posted @ 2013-10-07 22:48 阿牧遥 阅读(275) 评论(0) 推荐(0)
摘要: 这道题目仍然是二分,去掉不可能的部分。用了递归,在重复的情况下,就是有可能最左边的和最右边的相等,此时就不能直接判断出区间外的元素,左右两边同时递归。有重复元素的时候,在bad case的时候会退化为O(n)public class Solution { public boolean search(int[] A, int target) { return search(A, target, 0, A.length-1); } private boolean search(int[] A, int target, int left, int right)... 阅读全文
posted @ 2013-10-07 22:06 阿牧遥 阅读(164) 评论(0) 推荐(0)
摘要: 这道题比I难多了。由于是所有答案,肯定是全搜索。只能递归,虽然感觉效率很低,但似乎是唯一的办法,果然最后看到的测试用例也只有9个,再多估计就全超时了。public class Solution { public ArrayList generateTrees(int n) { return generateTrees(1, n); } private ArrayList generateTrees(int left, int right) { ArrayList ans = new ArrayList(); if (le... 阅读全文
posted @ 2013-10-06 22:09 阿牧遥 阅读(724) 评论(5) 推荐(1)
摘要: 这道题用DFS加计数肯定是可以做的,但是我忽然想不起下一个排列的非递归做法了。后来在网上找到如下:http://blog.csdn.net/morewindows/article/details/7370155如何计算字符串的下一个排列了?来考虑"926520"这个字符串,我们从后向前找第一双相邻的... 阅读全文
posted @ 2013-10-05 19:56 阿牧遥 阅读(320) 评论(0) 推荐(0)
摘要: 关键:1.维持三个指针pPrePre, pPre, pCurrent(两个其实也可以);2.使用头结点dummy简化过程;class Solution {public: ListNode *deleteDuplicates(ListNode *head) { ListNode* dummy = new ListNode(-1); dummy->next = head; ListNode* pPrePre = dummy; if (pPrePre == NULL) return dummy->next; ListNode... 阅读全文
posted @ 2013-10-05 19:24 阿牧遥 阅读(155) 评论(0) 推荐(0)
上一页 1 ··· 21 22 23 24 25 26 27 28 29 ··· 43 下一页