基本功
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 评论 -
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 评论 -
Verify Preorder Serialization of a Binary Tree
参考:点击打开链接对于二叉树,我们把空的地方也作为叶子节点(如题目中的#),那么有所有的非空节点提供2个出度和1个入度(根除外)所有的空节点但提供0个出度和1个入度我们在遍历的时候,计算diff = outdegree – indegree. 当一个节点出现的时候,diff – 1,因为它提供一个入度;当节点不是#的时候,diff+2(提供两个出度) 如果序列式合法的,原创 2016-07-26 15:01:57 · 222 阅读 · 0 评论 -
Odd Even Linked List
两根指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNod原创 2016-07-26 14:41:31 · 292 阅读 · 0 评论 -
Shortest Word Distance II
坚持,坚持,坚持public class WordDistance { Map> map = null; public WordDistance(String[] words) { map = new HashMap<>(); for (int i = 0; i < words.length; i++) { String原创 2016-06-18 03:12:03 · 260 阅读 · 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 评论 -
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 评论 -
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 评论 -
Range Sum Query 2D - Immutable
这道题一定要注意下标,一开始自己做的全都没有下标-1这一操作。public class NumMatrix { int[][] sum; public NumMatrix(int[][] matrix) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {原创 2016-07-25 04:11:57 · 256 阅读 · 0 评论 -
Binary Tree Longest Consecutive Sequence
要有好消息/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solut原创 2016-07-24 18:09:03 · 338 阅读 · 0 评论 -
Integer to English Words
此题当中有很多要注意的点:1. 各个字符数组的开头,都是空字符串;2. less100的下标第1个字符串是空的;3. 各个不同的空格;4. 最后返回res得做trim()处理;5. helper中的helper递归调用都是放在结尾的;6. 还是背一背吧,哈哈public class Solution { private final String[] less20原创 2016-07-01 15:17:19 · 243 阅读 · 0 评论 -
Fraction to Recurring Decimal
最好的参考:点击打开链接理解这几行就好了:nu = nu*10; sb.append(nu/de); nu = nu%de;public class Solution { public String fractionToDecimal(int numerator, int denominator) {原创 2016-07-24 13:26:21 · 228 阅读 · 0 评论 -
Binary Tree Right Side View (是不是得写篇字庆贺一下啊)
好像是中级题目以来,第一次自己思路一次就通过的的,红红火火恍恍惚惚哼哼哈嘿,是不是得写篇字庆贺一下啊,虽说不难吧,红红火火恍恍惚惚哼哼哈嘿。层级遍历,打印每层的最后一个数字。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *原创 2016-06-15 15:15:59 · 248 阅读 · 0 评论 -
House Robber II
这道题我们犯了两个大的错误:1. 忘记数量为1和2的情况了;2. 最关键的,我们一定要明确动归取值的意义。如此题,当start为0,表示可以从0这个位置开始,但从取值来看,未必就必须从0开始,如果1位置数值大,当然就可以从1开始,至于位置2,则是比较位置0加位置2的值和位置1的值,所以///// dp[1] = Math.max(dp[0], nums[1]);原创 2016-06-15 11:16:24 · 226 阅读 · 0 评论 -
Substring with Concatenation of All Words
参考小莹子同学的点击打开链接自己刚才一直在纠结这段code,其实就是保证还剩下最后一个当前满足条件的word能留下。if (curDict.get(temp) < dict.get(temp)) { count--; }ArrayList list = findSubstring("原创 2016-06-30 16:44:46 · 266 阅读 · 0 评论 -
Kth Smallest Element in a BST
工作时做一道题好难。。。最基本的中序遍历!/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */原创 2016-06-15 07:23:57 · 183 阅读 · 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 评论 -
Find Peak Element
坚持,坚持,再坚持!public class Solution { public int findPeakElement(int[] nums) { int start = 0, end = nums.length - 1; while (start + 1 < end) { int mid = start + (end - st原创 2016-06-19 14:08:33 · 184 阅读 · 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 评论 -
Find Leaves of Binary Tree
参考:点击打开链接这道题换句话说就是找每个node的index,这个index就是最后结果中这个节点所在的list的index,比如4,5,3的index是0, 2的index是1,1的index是2.怎么找呢?二分,看左,看右。确定一个点的index,得知道他的左孩子index是多少,右孩子的index是多少,当前这个点的index是他左右孩子的index最大值+1,这可以很容易原创 2016-08-09 19:39:24 · 239 阅读 · 0 评论 -
Kth Smallest Element in a Sorted Matrix
public int kthSmallest(int[][] matrix, int k) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { throw new IllegalArgumentException(""); } Prior原创 2016-08-04 12:50:13 · 277 阅读 · 0 评论 -
reverse list (recursive)
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode reve原创 2016-07-31 20:55:14 · 396 阅读 · 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 评论 -
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 评论 -
Get the median of k sorted arrays
public double mergekSortedArrays(int[][] arrays) { // Write your code here List list = new LinkedList<>(); double res = 0; if (arrays == null || arrays.length == 0原创 2016-07-19 10:32:14 · 600 阅读 · 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 评论 -
Sort List
掌握此归并排序list,对于快排,之后熟悉。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution {原创 2016-06-22 23:25:33 · 239 阅读 · 0 评论 -
Sum = K
给一个正数n,打印出所有相加的组合例如10可以打印出1+1+1+...11+2+1+...1... 鐣欏鐢宠璁哄潧-涓€浜╀笁鍒嗗湴9+110import java.util.*;public class Sum10 { public static void main(String[] args) { // TODO Auto-generated m原创 2016-07-18 13:59:26 · 283 阅读 · 0 评论 -
Insertion Sort List
插入排序注意维护,三个指针:next,prev,cur/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solu原创 2016-06-22 09:14:14 · 202 阅读 · 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 评论 -
linked list cycle ii
基本功,很好的参考:点击打开链接/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * }原创 2016-06-22 05:30:05 · 229 阅读 · 0 评论 -
strstrK
public class strstrK { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(check1("facebook", "bookshelf", 3)); System.out.println(check2("facebook",原创 2016-07-18 11:55:13 · 221 阅读 · 0 评论 -
Remove Duplicates from Sorted List II
基本功/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode原创 2016-06-21 08:39:40 · 331 阅读 · 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 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 评论 -
Merge Intervals
学会,熟练用排序,不要犯傻傻的错误。联系会议室问题。/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) {原创 2016-06-30 11:49:07 · 240 阅读 · 0 评论 -
Reverse Nodes in k-Group
这道题让自己做了很久,光是草稿纸画图,就用了3页。但我们觉得这是值得的!我们必须得有认真钻研的劲头,必须要搞得明明白白,不留死角。当中颠倒顺序的做法同之前的模板有不同。之前的是颠倒整个(子)list的顺序,不用考虑之后的链接。而这个是颠倒list中间一部分的顺序,必须要考虑整个list的链接。方法当中的prev和next是边界,不参与顺序颠倒,last是最开始要参与颠倒的节点,也是原创 2016-06-30 10:19:43 · 270 阅读 · 0 评论