1
sjphiChina
代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你。
展开
-
Data Stream as Disjoint Intervals
第一次用TreeSet。。。要懂得用这种结构/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { star原创 2016-09-02 23:21:50 · 376 阅读 · 0 评论 -
Best Time to Buy and Sell Stock III
把一个数组拆成两个数组,即处理两个stock I的问题,这样就求解了。left[0] 和right[length - 1] 都为0,因为这时各自都只剩下一个数组来处理了。很好的参考:点击打开链接public class Solution { public int maxProfit(int[] prices) { if (prices == null || pr原创 2016-07-17 01:10:58 · 238 阅读 · 0 评论 -
Combination Sum II
不同于Combination Sum I,这个是collection,是包含重复的元素。我们需要做一个判断,略过重复项。public class Solution { public List> combinationSum2(int[] candidates, int target) { List> result = new LinkedList<>();原创 2016-06-20 14:00:35 · 250 阅读 · 0 评论 -
Basic Calculator II
对此,就是理解思路,熟练无bugpublic class Solution { public int calculate(String s) { int sign = 1; int prev = 0; int mulDiv = -1; int res = 0; for (int i = 0; i < s.l原创 2016-06-20 06:05:29 · 219 阅读 · 0 评论 -
Wildcard Matching
这几天过的很混沌,但又。。。但愿是好的,我们的美好,像郭靖一样:坚持,努力。参考:点击打开链接之所以有这一行: idmatch++;是因为idmatch的位置已经match了public class Solution { public boolean isMatch(String s, String p) { int ids =原创 2016-07-05 19:34:29 · 274 阅读 · 0 评论 -
Zigzag Iterator
很好的参考点击打开链接,对其实是两个iterator的利用,对于follow up,之后看public class ZigzagIterator { Iterator it1 = null; Iterator it2 = null; int turn = 0; public ZigzagIterator(List v1, List v2) {原创 2016-06-19 20:51:31 · 329 阅读 · 0 评论 -
Largest BST Subtree
对于O(n)的方法,我们之后处理。这里是nlong(n)的方法,当中验证bst的思路很好。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x原创 2016-06-19 20:11:32 · 443 阅读 · 0 评论 -
Count Complete Tree Nodes
参考:点击打开链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class S原创 2016-06-19 17:27:41 · 203 阅读 · 0 评论 -
Maximum Subarray
经典dppublic class Solution { public int maxSubArray(int[] nums) { int[] sum = new int[nums.length]; int max = nums[0]; sum[0] = nums[0]; for (int i = 1; i < nums.l原创 2016-06-19 11:39:29 · 209 阅读 · 0 评论 -
Top K Frequent Elements
先贴出用了heap的做法,稍后要学会用桶排序来做。public class Solution { public List topKFrequent(int[] nums, int k) { List res = new LinkedList<>(); if (nums == null || nums.length == 0) {原创 2016-07-26 17:36:12 · 225 阅读 · 0 评论 -
Reconstruct Itinerary
一道好题,要常做常新。当中犯了两个错误:1. 对于[["JFK","KUL"],["JFK","NRT"],["NRT","JFK"]],会有这样的错误: ["JFK","KUL","NRT","JFK"]2. 对于sjc,是没有queue的,所以必须判断queue为空的情况public class Solution { List res = new LinkedList<>(原创 2016-07-26 16:00:01 · 364 阅读 · 0 评论 -
Flatten 2D Vector
此题有两种做法,都是O(n)的时间复杂度,但一个n的空间,一个1的空间。我们参考了1的空间,试着自己处理n的空间,于是看到了如下:public class Vector2D implements Iterator { List> list = null; int cur = -1; Iterator iterator = null; public原创 2016-06-18 17:34:20 · 386 阅读 · 0 评论 -
Single Number III
好好看看自己的迭代史public class Solution { public int[] singleNumber(int[] nums) { Set set = new HashSet<>(); for (int i: nums) { if (!set.add(i)) { set.remove原创 2016-06-18 15:32:21 · 183 阅读 · 0 评论 -
Regular Expression Matching
参考:点击打开链接对于这种几乎最高难度的题,甚于word ladder II,要放平心态。坚持,加油!public class Solution { public boolean isMatch(String s, String p) { if (p.length() == 0) { return s.length() == 0;原创 2016-07-04 09:02:21 · 294 阅读 · 0 评论 -
Maximum Product of Word Lengths
一道位操作的好题。当中的两个操作很好。public class Solution { public int maxProduct(String[] words) { if (words == null || words.length == 0) { return 0; } int[] elements = ne原创 2016-07-25 18:06:23 · 257 阅读 · 0 评论 -
The Skyline Problem
参考:点击打开链接要用最大堆,是保证,最高的楼总能展现在最外面,那些矮的楼都被覆盖了。循环中只要是左坐标,就要加入res中,只要这个左坐标还没有被用过,想这个例子就好了:[2, 10], [3, 15], [5, 12], [7, 15]遇到[5, 12],这时peek出来的是15(因为这是最大堆),而15在上次循环中已经被用过,压入了res中,而12刚被压入,还没有结束,所以不能原创 2016-07-03 09:21:00 · 318 阅读 · 0 评论 -
Sort Colors II
参考点击打开链接每次只对两个颜色min 和max排序,其他的都不变,于是中间再用I的方法即可求解。class Solution { /** * @param colors: A list of integer * @param k: An integer * @return: nothing */ public void sortCo原创 2016-07-17 01:51:57 · 378 阅读 · 0 评论 -
Rotate List
一道最基本的基本功,和rotate array联动 public ListNode rotateRight(ListNode head, int k) { if (head == null) { return head; } ListNode dummy = new ListNode(0);原创 2016-06-21 02:56:09 · 177 阅读 · 0 评论 -
Combination Sum IV
这个最后得用dp来做,自己一开始想到的递归在遇到如[1,2,3],target=32时会超时,因为会有181997601种可能,laptop运行了1小时都还没算完。。。 public static int combinationSum3(int[] nums, int target) { int[] array = new int[target + 1];原创 2016-09-02 08:18:17 · 306 阅读 · 0 评论 -
Word Pattern II
这道题得和I联动 boolean res = false; Map map = new HashMap<>(); Set set = new HashSet<>(); public boolean wordPatternMatch(String pattern, String str) { helper(pattern, 0, str, 0原创 2016-07-22 06:23:26 · 261 阅读 · 0 评论 -
Palindrome Permutation II
一道很好的综合题,考了回文处理,排列运算。常看常新,注意自己犯得错误。public class Solution { public List generatePalindromes(String s) { List result = new LinkedList<>(); if (s == null || s.length() == 0) {原创 2016-06-23 20:34:57 · 297 阅读 · 0 评论 -
3Sum Smaller
这题是允许重复的数字的,因为只要保证下标满足i, j, k with 0 就好。所以不需要开始的去重!再有,这种求小于某值或是大于某值的,看好了,求数量是坐标的相减public class Solution { public int threeSumSmaller(int[] nums, int target) { if (nums == null || n原创 2016-06-23 15:56:32 · 269 阅读 · 0 评论 -
Verify Preorder Sequence in Binary Search Tree
一道很好的拓展题,对于follow up,我们之后继续看。参考:点击打开链接public class Solution { public boolean verifyPreorder(int[] preorder) { int min = Integer.MIN_VALUE; Stack stack = new Stack<>();原创 2016-06-23 15:12:51 · 266 阅读 · 0 评论 -
Count Univalue Subtrees
参考:点击打开链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class S原创 2016-06-23 14:06:47 · 413 阅读 · 0 评论 -
Strobogrammatic Number II
参考:点击打开链接列出为0,1的情况,之后的情况皆是在此基础上产生:从中间插入来建立这个临时的字符串public class Solution { public List findStrobogrammatic(int n) { return findStrobogrammaticHelper(n, n); } private List f原创 2016-06-23 13:27:56 · 340 阅读 · 0 评论 -
Different Ways to Add Parentheses
把数字用符号隔开,用分治法求出所有可能。public class Solution { public List diffWaysToCompute(String input) { List result = new LinkedList<>(); for (int i = 0; i < input.length(); i++) {原创 2016-06-23 12:18:56 · 197 阅读 · 0 评论 -
Merge k Sorted Arrays
lintcode 上还超时。。。public class Solution { /** * @param arrays k sorted integer arrays * @return a sorted array */ public List mergekSortedArrays(int[][] arrays) {原创 2016-07-19 10:13:00 · 415 阅读 · 0 评论 -
Combination Sum III
挺简单的一道题,也出了3个错误,如何bug free啊public class Solution { public List> combinationSum3(int k, int n) { List> result = new LinkedList<>(); if (k == 0 || n < 1) { return resul原创 2016-06-23 08:28:24 · 233 阅读 · 0 评论 -
Missing Ranges
我们就用种最朴素的解法就好,bug free,考虑不同的Corner casepublic class Solution { public List findMissingRanges(int[] nums, int lower, int upper) { List result = new LinkedList<>(); if (nums.length原创 2016-06-23 07:29:13 · 301 阅读 · 0 评论 -
Reorder List
链表基本功1. 找到中点;2. 对链表后半部分反转;3. 将前半部分和后半部分拼接/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */原创 2016-06-22 08:12:22 · 212 阅读 · 0 评论 -
Convert Binary Search Tree (BST) to Sorted Doubly-Linked List
首先是中序遍历其次记住这是要做成double list。从TreeNode head, prev;private void traverse(TreeNode node){ if (node == null) { return; } traverse(node.left); node.left = prev; if (prev != null) { prev.right = n原创 2016-07-18 05:23:52 · 1306 阅读 · 0 评论 -
Surrounded Regions
这是的Number of Islands的先导题。以外围四条边为起始,找到当中的0,并从这个0开始找到与其联通的0,将这些0都置为特殊值,这些0都是不被x包围的。而于是剩下的0,则是被x包围。这中思维很重要。public class Solution { public void solve(char[][] board) { if (board == null原创 2016-06-21 16:57:17 · 196 阅读 · 0 评论 -
Partition List
这种链表的思路一定要掌握:两个dummy node各开一条临时链表,最后在拼接在一起。一定得记得去环啊!!/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x;原创 2016-06-21 13:03:16 · 207 阅读 · 0 评论 -
Remove Invalid Parentheses
参考:点击打开链接首先还是dfs来处理。括号总是成对出现的,因此我们只需要记录尚未匹配的(。 有三点要判断:(, 保留或者不保留。), 如果我们有未匹配的(,则有两种选择;否则,只能不保留。保留其他字符。因为我们要移除数量最少的括号,我们应该得到最大的匹配()数量,注意下面两行的顺序。helper(res, left.substring(1), righ原创 2016-07-02 15:19:09 · 268 阅读 · 0 评论 -
Expression Add Operators
一道求集合的dfs题。有很多的要注意的地方:1. 为了处理,"3456237490", 9191 -> []我们得用long来处理数字,表现在:long curNum = Long.valueOf(curStr);2. i是小于等于num的size,i 3. 对于乘法,要理解以下,来求解当前的结果curRes - prevNum + prevNum * curNum4.原创 2016-07-02 08:09:09 · 198 阅读 · 0 评论 -
Remove Duplicates from Sorted Array II
请和点击打开链接联动,多刷,这是基本功public class Solution { public int removeDuplicates(int[] A) { if (A.length < 3) { return A.length; } int prev = 1, cur = 2; while (cur < A.lengt原创 2016-06-14 06:55:10 · 233 阅读 · 0 评论 -
H-Index II
对于此题,背诵就够了。不过要明白的是,n-index得到的是大于等于这个index的数量,即在数组中,大于等于citation[i](含自己)的数量。最后返回n-min。常用0,1,3,5,6,7,8作例子吧public class Solution { public int hIndex(int[] citations) { int n = citatio原创 2016-06-29 13:12:12 · 299 阅读 · 0 评论 -
Minimum Size Subarray Sum
这道双指针问题,要反复常做。public class Solution { public int minSubArrayLen(int s, int[] nums) { // int j = 0, i = 0; // int sum =0; // int ans = Integer.MAX_VALUE;原创 2016-06-13 16:08:38 · 276 阅读 · 0 评论 -
Graph Valid Tree
这道题我们之后要用并查集来做,现在用的是bfs。这个要联系graph clone那道题。注意题目声明的是无向图,所以第二个for循环,必须得初始化两个值,[2, 0], [2, 1],是许可的。注意这个for的写法:for (int i: neighbors) { if(!set.contains(i)) qu原创 2016-06-13 11:56:19 · 364 阅读 · 0 评论 -
Course Schedule
从这道题给自己很多启示:1. 以后对于corner case,可以扔异常,这也是昨天的经验;2. 数组courses是记录每节课的度数,对于度数为0的则是最基础的课程,直接加入queue;3. 接着就是纯粹的图的拓扑排序。public class Solution { public boolean canFinish(int n, int[][] edges) { if原创 2016-06-29 08:18:44 · 271 阅读 · 0 评论