自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 FTPrep, 93 Restore IP Addresses

对IP的格式有所了解,归纳之后把各个片段的合法性都编写成一个 check function。这题有dfs的思路,个人觉得现在这个思路很简单清晰,把string 分成4段,也就是找3个中间的分割点,用substring 方法截取每一段,然后判断是否valid,全部valid才进行IP的拼接。易错点:中间3个截点的范围,因为既可以作为该片段的尾巴,也可以作为下一个节点的开始,而且substri

2017-09-27 01:33:09 141

原创 FTPrep, 92 Reverse Linked List II

这题很不错,是对之前的 reverse list 的加强。之前是reverse the whole list, 这里是partially的。也就是说要break up成3段,前两段的头尾都要记录,最后一段要记录头结点,最后拼接。中间那段需要reverse的,就通过之前的方法:头删+头插,头删需要2个pointer,头插需要一个pointer。代码如下:/** * Definiti

2017-09-27 01:16:50 133

原创 FTPrep, 91 Decode Ways, TODO: need to repeat and conclude

这道题,也很蛋疼。明明是要考DP,但是还要加复杂的判断条件。所以解题时不是很顺。题目提供了一个encoding的规则,从字母到数字,现在给数字,要来generate string,给出多少种这样的方式。TODO,integer to roman,roman to integer 归于一类。代码:public class Solution { public int numDeco

2017-09-27 00:54:45 170

原创 FTPrep, 90 Subsets II

这是Subset 的 一大类中的一个case。之前分析过了 subset 的基本原型,把代码都分析得比较透彻了。根据输出形式 list in list 很明显是 backtrakcing,要把 item是在for 循环里 +,递归,- (add,递归,remove)的格式。for loop的作用是把每个 元素作为起点进行遍历。OK,这道题中因为要避免duplicate,其实就是说,如果[i+1]=

2017-09-27 00:42:31 136

原创 FTPrep, 89 Gray Code

这道题 其实很算法的关系不大,更重要的是找到格雷码的形成规律。规律入下:1,base case:0,12,f: g(x) --> g(x+1), 相当于把g(x)里的元素逆序遍历,同时加上 11&2就说明了list的形成过程了。每一次+1有一个for,每一个for里要对之前的list进行遍历,又多了一个for,两个for搞定。代码如下:class Solution {

2017-09-27 00:23:47 140

原创 FTPrep, 88 Merge Sorted Array

这道题还是不错的,题目很简单,但需要活学活用。之前有partition,是分区,有array和list两个版本,现在这里来了个merge 2 sorted array,之前还有merge 2 sorted list,merge k sorted list,这些题都应该放在一起总结。题目给出的信息其实很有提示性了,array1的空间足够大,意思就是后面的空间都是空格,待写的。所以自然而然就想起用

2017-09-26 15:00:30 130

原创 FTPrep, 87 Scramble String, TODO, thumbdown 太多了,估计也不是什么好题。

TODO

2017-09-26 14:59:08 152

原创 FTPrep, 86 Partition List

这道题,我一开始想到的就是 array形式的 partition,通过swap来交换。于是开始傻傻分不清的 开始想在list 中怎么swap。只能说明,要么天赋太浅,要么不够用心,还没体会到array和list的本质差异,以及在这个本质差异上带来的哪些的操作的是便利和不便利。这道题用 老链头删和新链尾插就很好实现。头删需要2个指针,一个标记currNode,一个维护headNode。同样两个n

2017-09-26 13:39:08 142

原创 FTPrep, 85 Maximal Rectangle, TODO: 略难

todo

2017-09-26 13:31:01 130

原创 FTPrep, 84 Largest Rectangle in Histogram

这题难度有点大啊。参考了别人的方法,思路是这样的(思路和longest valid parens 那道题很像,要用stack来记录之前的合法左括号,用来track the 1st starting paren)1,把index压入stack,维护好从小到大的顺序,如果不符合,就一直弹出,弹出完成后,就要进行面积的更新。代码入下:class Solution {

2017-09-26 13:10:41 129

原创 FTPrep, 83 Remove Duplicates from Sorted List

值得总结的就是:与array相比,要修改(在list中是断开链接操作)一个值,没有index所以不具备array的功能。所以只能通过node的前续节点来access/getter 并且比较,然后再做断开修改的方式.一般只要断开的,都是通过前继节点,比如说remove the last k-th node的那道题。TODO,值得总结,list的各种处理方式代码:/** * Defi

2017-09-20 14:30:44 138

原创 FTPrep, 82 Remove Duplicates from Sorted List II

这道题其实和83是一对,83是基本类型,其实更加基础,做了这道之后再做83就容易很多。这道题是要移除所有重复过的node,我一开始就知道不能直接对比指针所指对象本身,因为就丢掉了指向该node的指针,没办法回去了,因为要从上一个地方开始切断然后连接。所以只能是通过checkNext这么一个指针(命名很重要,要切合功能和意思),和scanCurrAndCompareNext这两个指针进行判断

2017-09-20 14:08:04 259

原创 FTPrep, 81 Search in Rotated Sorted Array II

经典老题,是二分法的变形题目,TODO: 把这道题和search in 2D 这个二分法的题目放在一起总结,他自身也是跟没有duplicates的 rotated sorted array 是相联系的。代码:class Solution { public boolean search(int[] nums, int target) { if(nums.length=

2017-09-20 13:55:01 149

原创 FTPrep, 80 Remove Duplicates from Sorted Array II

这其实就是remove duplicates (只留一个元素的变体,这里要留下2个),那么就增加一个变量来计数,看出现的次数是多少了,因为至少一次,然后如果是出现了两次了,再出现时,setter坐标就不移动了。直到遇到unique元素,再替换,同时把appearance 改成1。TODO:总结 remove duplicates的各种体型,array vs list,保留1个 vs 2个 vs

2017-09-20 13:48:47 129

原创 FTPrep, 79 Word Search

这道题拿到手,是属于DFS还是BT呢?稍微考虑了一下,可以说是DFS,因为有4个分支;又有点像BT,因为board上的每一个点都可以作为起点(后来想清楚了,这个说法不成立,因为之前的combination,permutation这种都是凡是之前经过的点都不进行)。这个起点的问题就在主方法里遍历,这样的设计比较合理,比较intuitive。在dfs的实现中,其实还是用到了BT,因为有一个同等

2017-09-20 07:11:50 288

原创 FTPrep, 78 Subsets

还是BT方法,而且这道题应该在77之前做会更好,因为这个是最初的模型。每次用interface往下走的时候,都要把interface里传入的item 的副本加入到result里去,也再次说明了,for() loop里面的interface里都是带着上一层传过来的item 进入到下一层。代码如下: conditioning (which is no condition in this case)

2017-09-20 06:13:09 26326

原创 FTPrep, 77 Combinations

这是一大类型的题,对比总结发现就知道:核心是:backtracking的core,应对不同变体的处理方式是:退出条件的设立。还有一个特点就是他的输出是 list in list 的格式,首先要得到一个关于combination的list,然后在一定判断条件下,把这个valid的list加入结果result中。TODO:backtracking就是DFS的一种特例,是走到根节点,这个根节

2017-09-20 02:14:59 199

原创 FTPrep, 76 Minimum Window Substring

这道题绝对值得深入分析和总结相关的 substring的题型,个人感觉这类题虽然不是 intuitive,有点棘手,但是应该在面试还是经常可能出现的一类题。TODO!!分析此题,总结该类题型。代码:class Solution { public String minWindow(String s, String t) { if(s.length()==0 ||

2017-09-20 01:11:11 204

原创 FTPrep, 75 Sort Colors

这题做得还挺快的,为什么呢?因为我之前就深入分析过,这题和 remove duplicate in array 那道题有类似之处,第一次做时,我还把这题改成了 正负数和0三个区间,自己在MyEclipse上做了,还给刘晨让他做,哈哈。所以这里就是3个范围的元素进行整理。两次iterate,从左到右一遍,把第一类元素全部安排好了,放在最左边。第二次遍历,从右到左,把第三类元素都放到右边。剩下

2017-09-20 00:54:14 222

原创 FTPrep, 74 Search a 2D Matrix

很漂亮的一道题,binary search的典型变体。个人觉得考察的点就是,binary search的最终结束状态的left 和right 在哪里!!再次体现了,right这个坐标的重要属性:即这个right最终的index位置是小于target的最大值!或者说left在target左边,right在target的右边。怕记混的话,就只要举一个例子,当left和right相邻时,比如在 inde

2017-09-20 00:08:29 586

原创 FTPrep, 73 Set Matrix Zeroes

很漂亮的一道题,binary search的典型变体。再次体现了,right这个坐标的重要属性:即 这个right最终的index位置是小于target的最大值!怕记混的话,就只要举一个例子,当left和right相邻时,比如在 index 4 & 5 的位置,然后值分别是 10 & 20, target的话就3种情况,5, 15, 25。right的最终值是,越左界,4,5。这和上述结论就是一致

2017-09-19 23:43:55 209

原创 FTPrep, 72 Edit Distance

虽然是道Hard题,但是我立马联想到了ECS124的一次HW2,回头去看了,果真是同一类型的题目,其实就是2个序列做 alignment 时,找匹配度最高的一种alignment,说到底就是DNA/protein alignment 的算法。要看具体的2D array就去找HW2的解答,下面是代码:class Solution { public int minDistance(St

2017-09-16 13:11:13 197

原创 FTPrep, 71 Simplify Path

这题优点难度首先,凡是这种文件夹的题目,也就是说有层次的题目,大都是要用stack这种数据结构来处理,为什么?因为涉及到 晚上走一层 往下走一层等操作。stack可以通过push,pop来模拟了进入一层和出来一层这样的操作。然后就是怎么 通过一个string,读取层级相关的符号,然后构建出一个目录层次 相对应的 stack代码如下:class Solution { publ

2017-09-13 14:07:57 149

原创 FTPrep, 70 Climbing Stairs

斐波洛切 方程可以用递归 recursive,但是太耗空间时间,直接写for loop往前走只需要一次遍历。代码class Solution { public int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; int f1=1; int f

2017-09-13 14:02:57 121

原创 FTPrep, 69 Sqrt(x)

二分法解题,关键就是确定left 和 right,while 条件,和内部的变化。这道题,要有画面感,2条曲线: y=x, y=x*x ,这样在取第一个 right时,就是准确取到 right = x/2 + 1另外在判断 while 内部的条件时,可以通过考虑1,2这种简单的case来判断有没有等号,因为 mid = (left + right)/2 这是肯定的。本题的特点:退出条件是

2017-09-13 14:01:06 235

原创 FTPrep, 68 Text Justification, TODO

关于 String 处理的题,都很麻烦,还是hard题,放一放先

2017-09-11 09:45:51 107

原创 FTPrep, 67 Add Binary

这道题隔了好久之后做,居然不能快速动手,因为考虑到不同长度,不同时结束,carry是1  等各种情况。其实本质上这个和 plus1 是一样的,只是扩展了一下,成了一个更加general的情况。同时和之前两个List add的那道题一样一样的:点击打开链接,刚刚写了一遍,3min完成,凡是复制粘贴代码的方式,都容易 错过修改了一些变量名 而出错,一定要小心。思路就是,把继续往下加的情况全部放

2017-09-11 09:31:43 231

原创 FTPrep, 66 Plus One

很简单,一开始就把carry=1; 这样实现上和很容易但是如果是 plus2, plus3, plus4的题,一开始就是 carry = 2, 3, 4; 那最后的判断就是 if(carry > 0) { int[] result = new int[len+1]; result[0]=carry; return result; }代码:class Solution { pub

2017-09-11 07:13:05 137

原创 FTPrep, 65 Valid Number. TODO

这道题主要是各种edge case,每遇到这种需要 判断string 的各种edge case就默默知道肯定有自己想不到的case,或者就根本意识不到某些类型的 edge case的出现。

2017-09-11 07:00:47 152

原创 FTPrep, 64 Valid Number

和前面的两道题差不多的DP类型的问题,而且都是走方格子。所以,这三道题就是不同的变形,只要把这个类型的搞定了就okay了。DP + 2D-array 的题就靠这62-64三道题就够了。和设置障碍的那道题来说,这个在于第一行的处理要特别一点,因为还没有上面一行的格子可以判断。其他的地方都差不多。class Solution { public int minPathSum(int[

2017-09-11 06:58:17 165

原创 FTPrep, 63 Unique Paths II

和上题类似 点击打开链接但是因为加了obstacle这个条件,所以要改的地方 要搞对,也必须在特别了解 version I 的基础之上。1,第一列在version I中永远是1,所以不需要改变;但在version II 中,可能改变的,如果出现了障碍,那就是02,其他的点,如果有障碍,同样的,就是0了;不是的话就是 转移公式;3,为了一开始让record[0]=1,就要确定这个as

2017-09-11 03:08:42 111

原创 FTPrep, 62 Unique Paths

很简单的一道DP题目,而且只用了一个 一维数组 来记录左方和上方的元素,果然看透了本质,感觉是那么通透,解题是那么爽。class Solution { public int uniquePaths(int m, int n) { if(m==0 || n==0) return 0; int[] record = new int[n];

2017-09-11 02:43:00 119

原创 FTPrep, 61 Rotate List

这道题,就相当于拿到找倒数第k个node的那道题,只不是改了一下题面。倒数题的链接:点击打开链接多出的部分就是:1,要知道总长,k如果大于len,其实是要找到k%len 倒数的位置。2,最后记得要把 curr.next 变成 null,否则就是个环状list,最后输出结果时会 把内存爆了。顺便说一下:如果这道题是array的输出,实现时间 O(N),实现空间O(1)/**

2017-09-11 02:28:37 123

原创 FTPrep, 60 Permutation Sequence, TODO

这题是个 数学规律题,找到规律了还要通过算法来实现,所以找规律时也是有目的的找容易实现的规律不能马上做出来,放一会先。

2017-09-11 01:59:45 118

原创 FTPrep, Spiral Matrix II

思路很顺了,主要注意细节。好处理的地方在于这是个square1,n 的奇偶数,决定了最后的中心位置是一个点,通过go around 的方法没法reach到2,for 循环里的 int j 的范围,和对应的是row 还是 col 要找准了,一般是有很好的对称性的,先检查好对称性再 submit代码:class Solution { public int[][] generat

2017-09-11 01:53:54 134

原创 FTPrep, 58 Length of last word

简单的题,注意下edge case是否能够在 代码中处理就好。比如前后有空格的:trim();然后有可能是一个empty string,可以用一个len==0 来判定,也可以用 start==end,而不是start==end-1;class Solution { public int lengthOfLastWord(String s) { s.trim();

2017-09-10 05:58:02 146

原创 FTPrep, 57 Insert interval

这题还是有点意思,关键是能结合之前学过的数据结构,比如list,array,来实现相同的insert的功能,但是这里是给了一个新的object,要能活学活用。如果输入是排序好的list,那么就是直接用,否则还是要像上一题 merge interval 一样先排序。有了排序的输入,剩下的就是明确的思路了。本质上这个插入就是merge,要把将被 insert的interval 和已经存在的任何

2017-09-07 04:50:49 159

原创 FTPrep, 56 Merge Intervals

很典型的一道题,简单的OOD + 自定义排序器,排序方法 + 排序器的利用 Collections.sort( List, myComparator);代码如下:/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() {

2017-09-07 02:44:47 131

原创 FTPrep: 55, Jump Game

这题和max subarray 有点类似,都是在遍历经过每个点时进行变量的更新,max subarray: 点击打开链接, there are 2 variables there need to be updated, first local, then global, and !! Global is dependent on local !!!靠,这一点我在这里总结出来了!还有一点的话,在

2017-09-04 01:18:46 143

原创 FTPrep: 54 Spiral Matrix.

还是一道刻骨铭心的题目,因为Google实习第一面就遇到过。10min+ 写完,很有信心,而且和rotate image那道题目的 视觉化处理 联系起来了,除了一个sanity check的bug。所以勉强一遍 bug-free  : )把 矩阵想像成 4个直角三角形,这样就对每一圈,即for loop,的起点终点特别容易准确定位。在4个小的for loop 有比较对称的关系,如果

2017-09-03 14:38:32 147

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除