补课
sjphiChina
代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你。
展开
-
Topological Sorting
图的拓扑排序,这也是给自己补上一课。参考点击打开链接用的是bfs来处理的。有三个循环,第一个是将所有有父节点的节点放进map中,并对每一个节点保存其父节点的个数;第二个将将没有父节点的节点放进results和queue中,这些节点就是根节点,即拓扑的开端,第三个依次将每个有父节点的节点中保存的父节点个数不断减1,清0,注意自己清0的错误这个过程能保证顺序的/**原创 2016-05-31 19:33:37 · 280 阅读 · 0 评论 -
Count Primes
1不是prime,明白了吗!!!!知道如何求primepublic class Solution { public int countPrimes(int n) { boolean[] prime = new boolean[n]; Arrays.fill(prime, true); for (int i = 2; i < n; i+原创 2016-06-07 10:59:41 · 228 阅读 · 0 评论 -
Pow(x, n)
最朴素的想法会超时,当n特别大的时候。pow(x,n)就是求x的n次方。x的N次方可以看做:x^n = x^(n/2)*x^(n/2)*x^(n%2)。所以利用递归求解,当n==0,返回1。public class Solution { public double myPow(double x, int n) { if (n < 0) {原创 2016-06-29 11:31:56 · 313 阅读 · 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 · 287 阅读 · 0 评论 -
Simplify Path
这是一道新知补课题,unix的文件path表示法:当遇到“/../"则需要返回上级目录,需检查上级目录是否为空。当遇到"/./"则表示是本级目录,无需做任何特殊操作。 当遇到"//"则表示是本级目录,无需做任何操作。当遇到其他字符则表示是文件夹名,无需简化。当字符串是空或者遇到”/../”,则需要返回一个"/"。当遇见"/a//b",则需要简原创 2016-06-14 03:02:27 · 461 阅读 · 0 评论 -
Largest Rectangle in Histogram
单调栈,课上的知识今天终于用上了,不过好像就用上这三个字了,哈哈哈哈。很赞的参考:点击打开链接仔细我们犯得错误!stack里保存的是位置index,高度得用heights[stack.peek()]来得到。public class Solution { public int largestRectangleArea(int[] heights) { if (heigh原创 2016-07-01 08:05:43 · 276 阅读 · 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 · 222 阅读 · 0 评论 -
Wildcard Matching
这几天过的很混沌,但又。。。但愿是好的,我们的美好,像郭靖一样:坚持,努力。参考:点击打开链接之所以有这一行: idmatch++;是因为idmatch的位置已经match了public class Solution { public boolean isMatch(String s, String p) { int ids =原创 2016-07-05 19:34:29 · 263 阅读 · 0 评论 -
Largest Number
参考:点击打开链接1.此题的技巧,我们可以用String的拼接和compareTo来帮我们做比较,比如9和45;2. Comparator接口的compare是按小到大来排,缺省时,若想从大到小,可以将两个变量值逆着来比较public class Solution { public String largestNumber(int[] nums) { if (n原创 2016-06-23 08:02:53 · 192 阅读 · 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 · 285 阅读 · 0 评论 -
查找数组的前K个最小值的算法
备忘,参考:点击打开链接1. Simple Solution:A Simple Solution is to sort the given array using a O(nlogn) sorting algorithm like Merge Sort, Heap Sort, etc and return the element at index k-1 in the sorted原创 2016-08-01 01:53:58 · 977 阅读 · 0 评论 -
Group Shifted Strings
这道题关键在于得能确定:位移值,进而找到每个str的位移前的原始状态int shift = (str.charAt(i) - str.charAt(0) + 26) % 26;是最关键的。这个我们第一次见到,请理解学习。对于最后的排序,请记得我们可以采用现有的api去处理,不要太给自己找麻烦,因为既然这个不是真正的考点。for (List list: results) {原创 2016-06-06 20:12:40 · 307 阅读 · 0 评论 -
Paint Fence
这道题可以算是真正dp的经典入门题,自己一定得好好多多看看想想。给出一种思路,还有其他的,参看点击打开链接参看点击打开链接public class Solution { public int numWays(int n, int k) { int[] dp = {0, k, k*k, 0}; if (n <= 2) {原创 2016-06-06 19:29:38 · 491 阅读 · 0 评论 -
Strobogrammatic Number
对称数,新的知识,哈哈哈。同时得能想到,用map保存,而且是对应pair,6-9,9-6这样的来保存查找,这个和2Sum的找key很像啊。注意,是left 还有那是 || 的关系!public class Solution { public boolean isStrobogrammatic(String num) { if (num == null || nu原创 2016-06-06 06:47:56 · 270 阅读 · 0 评论 -
Word Ladder
一开始自己以为是用dp来做,其实后来一想,这也不符合dp的3种常见类型。学习了答案才知,这是一道考图的经典题目,用的是bfs。下面这张图真的很形象,解释了里面两个for循环是做什么的,同时一定要记得匹配了一个word后,要从字典中删除,这样来避免重复查找和死循环。/** * @param start, a string * @param end, a str原创 2016-06-01 12:21:40 · 260 阅读 · 0 评论 -
Intersection of Two Linked Lists
这是一道补课,兼智力开发题。从最优解法中要学到以下几点:1. 如果有相同节点链,必定存在相同结尾节点,用此可以判断最后是否存在相同节点:if (tailA != null && tailB != null && tailA != tailB) { return null; }2. 如果存在相同节点,且长度不同,当一个链到尾部,交换原创 2016-06-07 11:49:11 · 205 阅读 · 0 评论 -
Contains Duplicate III
这道题确实和之前的I,II有很大差别,当中自己也是要学甚多新的东西1. 我们需要学习SortedSet的思维和用法2. 这种特殊的二叉搜索3. 知道为啥吗set.remove((long)nums[i - k]);public class Solution { public boolean containsNearbyAlmostDuplicate(int[] nums原创 2016-06-07 23:20:39 · 234 阅读 · 0 评论 -
Game of Life
对于这种题,真要遇上了就认命了。参考点击打开链接,后续的问答,继续关注。这道题,关键在于能想到,状态转变0 : 上一轮是0,这一轮过后还是01 : 上一轮是1,这一轮过后还是12 : 上一轮是1,这一轮过后变为03 : 上一轮是0,这一轮过后变为1另外,每次比较都是和上一轮状态的比较。还有,这样写,不是自己想要的结果://lives = lives + boa原创 2016-06-24 15:59:56 · 275 阅读 · 0 评论 -
Gray Code
仔细观察格雷码当n=1时10当n=2时00011110当n=3时000001011010110111101100可以发现,n的格雷码,就是n-1的格雷码,再加上它们的逆序前面多一个1两种做法。public class Solution { public List grayCode(int n) { L原创 2016-06-24 20:01:00 · 208 阅读 · 0 评论 -
Compare Version Numbers
唉,今天想抽出时间太难了。。。这道题让自己有了新知,对于点‘.’的字符串拆分要特殊处理 String[] str1 = version1.split("\\.");另外,第一次的错误,问题出在了最后部分,简单的判断长度,会错判1.0和1的比较。public class Solution { public int compareVersion(String vers原创 2016-06-09 06:22:18 · 170 阅读 · 0 评论 -
Rectangle Area
数学题。如下要点:1.有四种情况,两个矩阵不重合2.计算重合时,先排序(这个不深究了,记住就好),然后是当中的中间区间相减,得到重合部分的面积public class Solution { public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { int原创 2016-06-09 23:18:45 · 254 阅读 · 0 评论 -
Sparse Matrix Multiplication
这是回顾矩阵乘法怎么做,补课啊。同时,因为是稀疏矩阵,有很多行或列是全0,于此,可以想到if (A[i][k] == 0) { continue; }这个条件满足,即可跳过,因为这一行的结果计算定为0public class Solution { public int[][] multiply(int[][原创 2016-06-11 04:51:48 · 341 阅读 · 0 评论 -
Implement Trie (Prefix Tree)
如何实现Trie字典。当中有两点:1. TrieNode中我们用的是大小为26的数组,而非map,因为题目本身限定,是字母的存储查询,用数组足够且更省空间。2. boolean isExist,代表从root到此节点所构成的word,是否存在,记住,这个是可以不存在的,即便到其子节点可能存在。class TrieNode { public char c;原创 2016-06-12 05:53:47 · 233 阅读 · 0 评论 -
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 · 359 阅读 · 0 评论