2
sjphiChina
代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你。
展开
-
Perfect Squares
原来是dp问题,最好解。转移方程:dp[i] = Math.min(dp[i], dp[i - j*j] + 1);求的是最小值public class Solution { public int numSquares(int n) { int max = (int)Math.sqrt(n); int[] dp = new int[n + 1]; A原创 2016-06-24 07:31:49 · 220 阅读 · 0 评论 -
Majority Element II
朴素的解法很简单,对于improved的,这个思维很好,得掌握。另外,那个是否为null的判断一定得做啊!!!!!!!public class Solution { public List majorityElement(int[] nums) { List list = new LinkedList<>(); if (nums == null |原创 2016-06-20 10:42:14 · 204 阅读 · 0 评论 -
Set Matrix Zeroes
两种做法:1:m+n的空间复杂度,定义两个bool数组,分别为row和col,记录这个row和col是否要置0,最后再遍历这两个数组,将matrix的相应值置0;2:1的空间复杂度,利用第一行和第一列来记录从第二行和第二列开始的矩阵中的某一位置是否置为0.public class Solution { public void setZeroes(int[][] matrix)原创 2016-06-19 19:15:33 · 188 阅读 · 0 评论 -
Maximum Product Subarray
坚持,坚持,坚持public class Solution { public int maxProduct(int[] nums) { if (nums.length == 1) { return nums[0]; } int maxProd = nums[0], maxTemp = nums[0], minTem原创 2016-06-18 04:45:25 · 220 阅读 · 0 评论 -
Maximal Rectangle
多谢上一题的方案,这一题就容易多了。把每一行和它以上的部分都当做是直方图来求解。当中自己犯得错误是,当这一行的某一位置高度为0,其高度就是0,不可以再和上一行的高度相加了!public class Solution { public int maximalRectangle(char[][] matrix) { if (matrix == null) {原创 2016-07-01 08:35:40 · 197 阅读 · 0 评论 -
Factor Combinations
又成一道新知。public class Solution { public List> getFactors(int n) { List> results = new LinkedList<>(); List list = new LinkedList<>(); getFactorsHelper(n, results, list, 0);原创 2016-06-15 04:31:07 · 319 阅读 · 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 · 229 阅读 · 0 评论 -
Word Search
和island number有相同之处,都是要dfs遍历周围的点,并设置新值,但是在前者不需要返回结果,后者的返回结果是或的关系,而自己一开始却是按照与的结果返回的,直接思路就错了。。public class Solution { public boolean exist(char[][] board, String word) { if (board == null原创 2016-06-12 01:46:07 · 208 阅读 · 0 评论 -
Sort Colors
暴力的办法就是普通数组排序,但此题有其特殊性,即只有3个不同的数字,0,1,2,对此排序想法就是遇到0,就都放到最前面,遇到2,就都放到最后面,遇到1,就pass。但必须要注意的是对于遇到2,index i不能++前进,因为这个换来的数字可能是0 或是1,必须再次排序,但由于有了p2--,所以并不会死循环。/** * @param nums: A list of integ原创 2016-05-29 11:42:07 · 223 阅读 · 0 评论 -
Subsets II
这个请好好理解i>0和i!=pos的区别,自己一开始认为是相同的效果,但其实是全然不同的对于:[1,2,2]前者:[[],[1],[1,2],[2]]后者:[[],[1],[1,2],[1,2,2],[2],[2,2]]public class Solution { public List> subsetsWithDup(int[] nums) { List原创 2016-06-10 13:56:14 · 302 阅读 · 0 评论 -
Rotate Image
置换规律:参考点击打开链接int offset = i - start;public class Solution { public void rotate(int[][] matrix) { int start = 0, end = matrix.length - 1; while (start < end) { for (原创 2016-06-23 07:26:34 · 257 阅读 · 0 评论 -
Bulls and Cows
这道题感觉也真是给自己新知,自己一开始有点蒙,尤其是想就一次循环把两只牛都求出来。一次求其实可以,但确实一上来有难度,这个在平时也就罢了,但在面试时咋办啊。退而求其次,就一点,找到一个能work的方法也行。下面的做法是参考了一种两次循环的比较好的。第一次for,求出bull的数量,同时将secret的其它字符连带数量存入map,第二次for,求出cow的数量,比对guess这种妥协原创 2016-06-10 08:17:37 · 197 阅读 · 0 评论 -
Next Permutation
这个就是一定要理解如何求下一个排列的数学规律。用一个例子来说明,比如排列是(2,3,6,5,4,1),求下一个排列的基本步骤是这样:1) 先从后往前找到第一个不是依次增长的数,记录下位置p。比如例子中的3,对应的位置是1;2) 接下来分两种情况: (1) 如果上面的数字都是依次增长的,那么说明这是最后一个排列,下一个就是第一个,其实把所有数字反转过来即可(比如(6,5,4,3原创 2016-06-20 13:30:28 · 178 阅读 · 0 评论