
补课
sjphiChina
代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Topological Sorting
图的拓扑排序,这也是给自己补上一课。 参考点击打开链接 用的是bfs来处理的。 有三个循环, 第一个是将所有有父节点的节点放进map中,并对每一个节点保存其父节点的个数; 第二个将将没有父节点的节点放进results和queue中,这些节点就是根节点,即拓扑的开端, 第三个依次将每个有父节点的节点中保存的父节点个数不断减1,清0,注意自己清0的错误 这个过程能保证顺序的 /**原创 2016-05-31 19:33:37 · 323 阅读 · 0 评论 -
Count Primes
1不是prime,明白了吗!!!! 知道如何求prime public 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 · 257 阅读 · 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 · 375 阅读 · 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 · 340 阅读 · 0 评论 -
Simplify Path
这是一道新知补课题,unix的文件path表示法: 当遇到“/../"则需要返回上级目录,需检查上级目录是否为空。 当遇到"/./"则表示是本级目录,无需做任何特殊操作。 当遇到"//"则表示是本级目录,无需做任何操作。 当遇到其他字符则表示是文件夹名,无需简化。 当字符串是空或者遇到”/../”,则需要返回一个"/"。 当遇见"/a//b",则需要简原创 2016-06-14 03:02:27 · 497 阅读 · 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 · 311 阅读 · 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 · 249 阅读 · 0 评论 -
Wildcard Matching
这几天过的很混沌,但又。。。但愿是好的,我们的美好,像郭靖一样:坚持,努力。 参考:点击打开链接 之所以有这一行: idmatch++;是因为idmatch的位置已经match了 public class Solution { public boolean isMatch(String s, String p) { int ids =原创 2016-07-05 19:34:29 · 290 阅读 · 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 · 228 阅读 · 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 · 321 阅读 · 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 · 1028 阅读 · 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 · 334 阅读 · 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 · 540 阅读 · 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 · 309 阅读 · 0 评论 -
Word Ladder
一开始自己以为是用dp来做,其实后来一想,这也不符合dp的3种常见类型。学习了答案才知,这是一道考图的经典题目,用的是bfs。 下面这张图真的很形象,解释了里面两个for循环是做什么的,同时一定要记得匹配了一个word后,要从字典中删除,这样来避免重复查找和死循环。 /** * @param start, a string * @param end, a str原创 2016-06-01 12:21:40 · 299 阅读 · 0 评论 -
Intersection of Two Linked Lists
这是一道补课,兼智力开发题。从最优解法中要学到以下几点: 1. 如果有相同节点链,必定存在相同结尾节点,用此可以判断最后是否存在相同节点: if (tailA != null && tailB != null && tailA != tailB) { return null; } 2. 如果存在相同节点,且长度不同,当一个链到尾部,交换原创 2016-06-07 11:49:11 · 243 阅读 · 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 · 272 阅读 · 0 评论 -
Game of Life
对于这种题,真要遇上了就认命了。参考点击打开链接,后续的问答,继续关注。 这道题, 关键在于能想到,状态转变 0 : 上一轮是0,这一轮过后还是0 1 : 上一轮是1,这一轮过后还是1 2 : 上一轮是1,这一轮过后变为0 3 : 上一轮是0,这一轮过后变为1 另外,每次比较都是和上一轮状态的比较。 还有,这样写,不是自己想要的结果: //lives = lives + boa原创 2016-06-24 15:59:56 · 316 阅读 · 0 评论 -
Gray Code
仔细观察格雷码 当n=1时 1 0 当n=2时 00 01 11 10 当n=3时 000 001 011 010 110 111 101 100 可以发现,n的格雷码,就是n-1的格雷码,再加上它们的逆序前面多一个1 两种做法。 public class Solution { public List grayCode(int n) { L原创 2016-06-24 20:01:00 · 244 阅读 · 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 · 203 阅读 · 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 · 306 阅读 · 0 评论 -
Sparse Matrix Multiplication
这是回顾矩阵乘法怎么做,补课啊。 同时,因为是稀疏矩阵,有很多行或列是全0,于此,可以想到 if (A[i][k] == 0) { continue; }这个条件满足,即可跳过,因为这一行的结果计算定为0 public class Solution { public int[][] multiply(int[][原创 2016-06-11 04:51:48 · 378 阅读 · 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 · 273 阅读 · 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 · 422 阅读 · 0 评论