strStr
文章平均质量分 86
sjphiChina
代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你。
展开
-
strStr
从今天起/** * Returns a index to the first occurrence of target in source, * or -1 if target is not part of source. * @param source string to be scanned. * @param target string原创 2016-03-14 14:44:15 · 265 阅读 · 0 评论 -
Palindrome Partitioning II
此题是在帮我们学习几种思维概念:1. 将单个字符串用二维数组表示matrix,matrix[i][j]代表,从字符i到字符j的一个子串,02. matrix[i][j]这个子串是否是回文,由字符i是否等于字符j和matrix[i+1][j-1]是否为回文决定3.对于matrix[i][j]这个子串,如果是回文,下刀在i-1处,于是得到,j处的下刀个数,寻回往复得到j处的最小下刀数。原创 2016-05-26 13:04:22 · 167 阅读 · 0 评论 -
Longest Common Prefix
public class Solution { public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) { return ""; } int num = strs.length;原创 2016-05-26 14:22:35 · 150 阅读 · 0 评论 -
Longest Common Subsequence
此题,两个字符串比较,一般记得先定义二维数组,各维代表一个字符串。matrix[i][j]代表:字符串a的从0到第i个字符和字符串b的从0到第j个字符的最长相同子序列长度。那么对于这个长度:如果i和j相等,那即为matrix[i-1][j-1](各自前一个字符串的最长相同子序列长度)加上 1(又一个相等的)如果不等,那即为,matrix[i-1][j-1],matrix[i][j-原创 2016-05-26 14:39:10 · 356 阅读 · 0 评论 -
Longest Common Substring
有了前面Longest Common Subsequence的练习,这个题可以照葫芦画瓢,但是要注意的是,是什么的值可以传递,最后要返回的值是存在哪里的。1. 这个是求子字符串,必须是连续的,即,如果i和j匹配,值只能从i-1,j-1处得到,再加一,如果不匹配,[i][j]即为0,不可传递。2. 最大值是单独保存的,因为最大值无法在数组中持续传递public class Solutio原创 2016-05-26 15:17:47 · 339 阅读 · 0 评论 -
Edit Distance
此题和之前的三道题很相近,都是要创建一个二维数组来解。但是注意数组要初始化,因为当前[i][j]是由[i-1][j-1], [i-1][j], [i][j-1]决定,而初始值若放到一个大循环来赋值会很复杂,同时数组长度定义为字符串长度+1。一定要明白的是我们所定义的数组,[i][j]到底代表的是什么,在我们这里,即字符串a的第i个字符和字符串b的第j个字符的最小编辑次数。那如果,i和j相等,其原创 2016-05-26 16:25:14 · 182 阅读 · 0 评论 -
Interleaving String
此题所犯的错误,参看leetcode。重点在于如何定义[i][j]到底代表啥,之后,必须严格按照状态转移方程来写code。值得反复理解,反复做public class Solution { public boolean isInterleave(String s1, String s2, String s3) { int l1 = s1.length();原创 2016-05-26 18:50:12 · 199 阅读 · 0 评论 -
Decode Ways
单序列问题,定义一个length+1的一维数组,状态:[i]代表到字符i-1时的方案个数最重要的,也是自己忽略的,个数可以为0,如1230public int numDecodings(String s) { // Write your code here if (s == null || s.length() == 0) {原创 2016-05-27 13:14:44 · 189 阅读 · 0 评论 -
backpackII
有了前一题的基础,此题就很直接了。前一题求重量,此题求的是价值,那么将重量换为价值即可。但是看看下面的一个bug,阴沟翻船啊!!!!!!咋搞的。。。。写的时候不看code吗/** * @param m: An integer m denotes the size of a backpack * @param A & V: Given n items with s原创 2016-05-27 18:04:49 · 323 阅读 · 0 评论 -
backpack
最后找到了一种容易理解的01背包问题解法。还是如何定义状态和状态转移方程我们定义了一个二维int数组,[i+1][j]代表前A[i]个物品在不超过j容量下,能取到的最大值。如果,第i个物品比当前容量大,则不放入A[i]物品,只用[i][j]即可;如果,第i个物品小于等于当前容量,则要比较:不放入A[i]物品时j容量能取得最大值,与,不放入A[i]物品时j-A[i]容量能取的最大原创 2016-05-27 17:38:18 · 300 阅读 · 0 评论 -
2Sum
这是一道简单题,请看好了/* * @param numbers : An array of Integer * @param target : target = numbers[index1] + numbers[index2] * @return : [index1 + 1, index2 + 1] (index1 */ p原创 2016-05-28 16:56:51 · 238 阅读 · 0 评论 -
3Sum
看看下面都错哪里了public class Solution { /** * @param numbers : Give an array numbers of n integer * @return : Find all unique triplets in the array which gives the sum of zero. */原创 2016-05-28 16:58:35 · 207 阅读 · 0 评论 -
4Sum
会了3Sum,4Sum应该就是多来一笔了。/** * @param numbers : Give an array numbersbers of n integer * @param target : you need to find four elements that's sum of target * @return : Find all unique原创 2016-05-28 17:00:14 · 223 阅读 · 0 评论 -
kSumII
结合前面的permutation和combination的DFS来解这道题。再看看自己都错在哪里了!!!/** * @param A: an integer array. * @param k: a positive integer (k * @param target: a integer * @return a list of list原创 2016-05-28 17:01:26 · 254 阅读 · 0 评论 -
3Sum Closest
有了3Sum的基础,这个本来应该很好解决,但是自己却提交了5次。。。。咋搞的,到底要比较的是啥,下面咋那么多次错误public int threeSumClosest(int[] numbers, int target) { // write your code here if (numbers == null || numbers.length原创 2016-05-28 17:47:00 · 209 阅读 · 0 评论 -
kSum
参考点击打开链接原文说的很好,尤其是使用三维动规数组dp[i][j][t],表示从0遍历到A[i]后找到的j个元素之和为t的情况的总数。最后返回从整个A数组找到的k个元素之和为target的情况总数即可。其余的就过遍数即可。/** * @param A: an integer array. * @param k: a positive integer (k原创 2016-05-28 18:45:31 · 356 阅读 · 0 评论 -
Two Sum II
这该是一道挺简单的题,用两根指针一头一尾向中间逼近。计算数量时,一定要清楚,是这个,count = count + (right - left);, 而不是count++;/** * @param nums: an array of integer * @param target: an integer * @return: an integer原创 2016-05-28 19:18:54 · 213 阅读 · 0 评论 -
Triangle Count
可能是lintcode上的标注有误,这个题感觉不该是hard,列出两种做法,一种,2层循环加双指针/** * @param S: A list of integers * @return: An integer */ public int triangleCount(int S[]) { // write your cod原创 2016-05-28 19:48:45 · 497 阅读 · 0 评论 -
Container With Most Water
两种做法/** * @param heights: an array of integers * @return: an integer */ public int maxArea(int[] heights) { // write your code here//对撞指针,一次遍历 if (heights原创 2016-05-28 20:35:09 · 216 阅读 · 0 评论 -
Trapping Rain Water
当中要设定smaller,用此去不断地和比其小的值相减,就可以得到面积。当中自己怀疑,一边会漏的情况,但事实上,我们判断选择时就选了最低的一边,而且是从两边向中间逼近的。可以放心/** * @param heights: an array of integers * @return: a integer */ public int trapRa原创 2016-05-28 21:02:35 · 255 阅读 · 0 评论 -
Subarray Sum
此题两种做法,暴力做法n方,如下注释部分,但当中还是有两个coner case没想到,只有一个0,和数组当中出现一个0优化的方法是用map,先sum = nums[i] + sum; 再if (map.containsKey(sum)) ,这个当中的思维,算是技巧,也是基本功。/** * @param nums: A list of integers * @retu原创 2016-05-29 09:35:44 · 273 阅读 · 0 评论 -
Merge Sorted Array
这题补的是我们的基本功,数组merge,不要总想着正向走,还有逆着呢。两种解法,一个正向,太复杂了,一个逆向,我们得掌握的。补欠账!!/** * @param A: sorted integer array A which has m elements, * but size of A is m+n * @param B: sort原创 2016-05-29 10:03:25 · 185 阅读 · 0 评论 -
Maximum Subarray
相比最初的暴力解法,这题有很多优化,我们选了类似于贪心的方式处理sum = sum + nums[i];而当sum/** * @param nums: A list of integers * @return: A integer indicate the sum of max subarray */ public int maxSubAr原创 2016-05-29 11:00:46 · 224 阅读 · 0 评论 -
Subarray Sum Closest
这道题让自己很囧,现在对于参考答案依然有嘻嘻哈哈的感觉。。。参考点击打开链接/** * @param nums: A list of integers * @return: A list of integers includes the index of the first number * and the index of the原创 2016-05-29 13:50:02 · 293 阅读 · 0 评论 -
Partition Array
这道题用两根指针,向中间逼近。一定要注意的是corner case时的下标处理。/** *@param nums: The integer array you should partition *@param k: As description *return: The index after partition */ public int原创 2016-05-29 18:26:28 · 379 阅读 · 0 评论 -
Median of two Sorted Arrays
参照点击打开链接用二叉搜索来处理此题以如下两个数组为例:012345a0a1a2a3a4a5012345b0b1b2b3原创 2016-05-29 20:27:50 · 335 阅读 · 0 评论 -
Distinct Subsequences
两个字符串,二维数组。关键在于状态转移方程的确定,不清楚的时候,请画图。同时请看下面的bug!!!!public class Solution { public int numDistinct(String s, String t) { if (s == null || t == null) { return 1;原创 2016-05-26 17:57:59 · 205 阅读 · 0 评论 -
Hash Function
此题,重在求模函数的运用。参考点击打开链接精华在hashSum = 33 * hashSum + key[i];/** * @param key: A String you should hash * @param HASH_SIZE: An integer * @return an integer */public int hashC原创 2016-05-30 13:32:33 · 328 阅读 · 0 评论 -
Merge k Sorted Arrays
此题是自己的一个学习过程,真是第一次用PriortyQueue,如何定义一个class并在当中实现Comparable接口,如何用PriortyQueue的思维去处理问题。在定义ArrayContainer中,一定要明确的是index到底代表什么,是自身数组的当前下标,而与[][]的循环无关,所以当中的第一个错误不应该。第二个错误,是告诉我们要处理边界条件。整个思路参考:点击打开链接/原创 2016-05-30 21:45:07 · 603 阅读 · 0 评论 -
Rehashing
这道题考查的是coding的熟练程度,我感觉,对于数组和链表的基本操作。要注意的是对于值为负数的取模处理, if you directly calculate -4 % 3 you will get -1. You can use function: a % b = (a % b + b) % b to make it is a non negative integer.。/**原创 2016-05-30 22:42:01 · 399 阅读 · 0 评论 -
Implement Queue by Two Stacks
基础知识的考察,补课public class Queue { private Stack stack1; private Stack stack2; public Queue() { // do initialization if necessary stack1 = new Stack<>(); stack2 = new S原创 2016-05-31 01:18:54 · 250 阅读 · 0 评论 -
LRU Cache
当年oracle面试时,ravi就反复问我们这道题,当时竟然不知这是一道可以准备的高频题,当然最重要的是当时只是限于用queue和map去做了,没有想到用双向循环列表。虽然最后过了,但心中一直抱憾。今天我们终于要面对这道题,觉得这道题如果想到了用双向循环列表和map就没有技术难度了,剩下的只是对lru的理解,和链表操作的基本功。于是在我们的code中,这两点都犯了错误,尤其是lru的理解,第4个错原创 2016-05-31 10:32:20 · 286 阅读 · 0 评论 -
Largest Rectangle in Histogram
这是一道智力题,我还会再次好好做这个的一个很好的参考:点击打开链接/** * @param height: A list of integer * @return: The area of largest rectangle in the histogram */ public int largestRectangleArea(in原创 2016-05-31 12:46:02 · 223 阅读 · 0 评论 -
劲头是好的
刚才Binary Tree Serialization换了另一种解法,很快就出来了。。昨天那时太局限了。但是无论如何,当时,自己那种认真求索的劲头是好的,自己能够深入分析,找到真正的原因,这是提倡的!同时,限于当前的境况,我们也要效率。加油!!原创 2016-05-19 11:12:43 · 210 阅读 · 0 评论 -
Topological Sorting
图的拓扑排序,这也是给自己补上一课。参考点击打开链接用的是bfs来处理的。有三个循环,第一个是将所有有父节点的节点放进map中,并对每一个节点保存其父节点的个数;第二个将将没有父节点的节点放进results和queue中,这些节点就是根节点,即拓扑的开端,第三个依次将每个有父节点的节点中保存的父节点个数不断减1,清0,注意自己清0的错误这个过程能保证顺序的/**原创 2016-05-31 19:33:37 · 278 阅读 · 0 评论 -
Word Ladder
一开始自己以为是用dp来做,其实后来一想,这也不符合dp的3种常见类型。学习了答案才知,这是一道考图的经典题目,用的是bfs。下面这张图真的很形象,解释了里面两个for循环是做什么的,同时一定要记得匹配了一个word后,要从字典中删除,这样来避免重复查找和死循环。/** * @param start, a string * @param end, a str原创 2016-06-01 12:21:40 · 258 阅读 · 0 评论 -
Word Ladder II
这道题,我们给出自己的办法,但总是超时,对于参考答案,我们现在还没有找到合适,最重要的是能说服自己到底优化在哪了,所以先留着,等之后,过两周后,再看此题。原创 2016-06-01 14:44:01 · 371 阅读 · 0 评论 -
Merge Sorted Array
针对现在的情况,我们调整了做题准备的策略,加油,大事临头向前冲,开心胸!但就是这个一个简单题,错了两次,为啥啊!!!Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note:You may assume that nums1 has e原创 2016-06-01 18:09:21 · 223 阅读 · 0 评论 -
Intersection of Two Linked Lists
这是一道补课,兼智力开发题。从最优解法中要学到以下几点:1. 如果有相同节点链,必定存在相同结尾节点,用此可以判断最后是否存在相同节点:if (tailA != null && tailB != null && tailA != tailB) { return null; }2. 如果存在相同节点,且长度不同,当一个链到尾部,交换原创 2016-06-07 11:49:11 · 203 阅读 · 0 评论 -
wood cut
这道题关键在于,我们得灵活思路,能够想到,是对最大的木头长度做二分处理,找出最大公约数。/** *@param L: Given n pieces of wood with length L[i] *@param k: An integer *return: The maximum length of the small pieces. */原创 2016-05-20 21:05:26 · 287 阅读 · 0 评论