自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 FTPrep, 109 Convert Sorted List to Binary Search Tree

把问题转化成108了,但是有没有直接从list 入手的方法呢? TODO代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } *//**

2017-10-07 12:51:57 175

原创 FTPrep, 108 Convert Sorted Array to Binary Search Tree

套路一样一样的,还结合binary search,棒棒的。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x;

2017-10-07 12:50:49 129

原创 FTPrep, 107 Binary Tree Level Order Traversal II

看了题目之后,结合之前对 level traversal version I 和zigzag的总结,瞬间反映出来,只需要子在 version I 的基础上改一处代码即可。然已。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left

2017-10-07 12:44:38 283

原创 FTPrep, 106 Construct Binary Tree from Inorder and Postorder Traversal

和105 是一个道理,套路是一样一样的。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } *

2017-10-07 12:41:14 141

原创 FTPrep, 105 Construct Binary Tree from Preorder and Inorder Traversal

这题是套路,看过一遍就应该很容易理解记忆了。后面的题是变体,通过inorder + postorder 来构建一棵树。所以inorder是必须的,然后preorder 和 postorder 有一个就okay了。关键一点是找到inorder中root的位置,可以根据root.value来找。然后为了查询 inorder中的root index 简单容易,通过构建一个HashMap就可以。代

2017-10-07 12:31:24 195

原创 FTPrep, 104 Maximum Depth of Binary Tree

简单题,不多废话,还是根据 root的四种条件分析,只是这里有几个条件都可以包括在root==null 这个情况下。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tre

2017-10-06 13:11:13 143

原创 FTPrep, 103 Binary Tree Zigzag Level Order Traversal

这道题和上面的102极像,为了正反方向,可以设置一个level的变量,看level的奇偶数 来觉得读取的方向。但是 要保持头脑清醒,这里的正方向,看似是读取的方向,实际上可以不是读取的方向!!如果看成是读取的方向,那在写判断条件的时内部的操作,代码就很多。换一个角度,其实还是保持从左到右的读取方向,但是在存入 item list 时可以倒着存入!!每次都存入 位置是 0 的点,这样就非常简单的

2017-10-06 13:03:28 166

原创 FTPrep, 102 Binary Tree Level Order Traversal

典型的层序遍历,BFS  tree traversal,就是起始用一个list,装入root。然后用while() 把list全部输出,该层次上的opt;同时形成下一层node 的list 形成,所以loop里要new 一个newList,退出循环前list=newList我觉得面试前看看代码还有必要的,很容易抓到关键点,只要优点印象就基本写得出。注意这里也是个list in list的输出,

2017-10-06 12:59:30 148

原创 FTPrep, 101 Symmetric Tree

还是按照上一道99题的思路来,对root的4种情况进行一一判断。这里要进行问题转换,一个node不好比较。有两个node才容易对比,从空间上来说,symmetric 就是对称,镜像的左和右相等,而不是完全的一一对应相等。前后两次代码,相差一周时间:1,/** * Definition for a binary tree node. * public class TreeNode

2017-10-06 12:09:32 143

原创 FTPrep, 100 Same Tree

一道简单题,但是是一个prototype 模版解题的开始,适用于任何用recursion 解决Binary Tree的问题。1,base case,当root==null时,2,root.left, root.right都为null时,即叶子节点3,root.left or root right 有一个为null这样写就非常保险,涵盖了root的四种情况,虽然在有些题中,这四种情况

2017-10-06 11:51:08 122

原创 FTPrep, 99 Recover Binary Search Tree. TODO

seems hard. let me think it for a while. Todo todo

2017-10-06 11:42:00 154

原创 FTPrep, 98 Validate Binary Search Tree

这道题拿到手里,最直接的方法就是 inorder遍历,生成一个list,然后挨个检查看是不是增序排列。思路是这样的,但是考虑到,可以在存表的时候就检查了两两相邻元素,而不需要全部存好再检查。再 进一步优化,其实不需要存整个list呀,因为如果所有相邻的两两元素都满足条件那就okay了。所以只需要一个 其他 变量来维护就okay了。代码的套路,就是来自于 iterative inorder

2017-10-06 11:27:53 142

原创 FTPrep, 97 Interleaving String

这是一道典型的 动态规划的题目,而且是2D DP, 照理说是要用一个2D array来记录判断情况的。最初的原型是Edit Distance。那里是判断最少的 edit 次数 使得两个string 相同。这里的话有所变化,但其实本质上还是一样的,就是看path是往 右边走 还是 下边走,往右是因为shortWord的下一个字母和string3中的字母match,往下边走是因为string3

2017-10-06 08:08:58 134

原创 FTPrep, 96 Unique Binary Search Trees

这道题拿到手有点不知道怎么开始。看了别人的分析,自己画一画 几种情况,其实也就明白了。代码里的变量名说明了思路, 就是用DP的方法,记录 当node总数为n时,符合条件的数的情况。然后不断可以根据之前所有的 1 to (n-1) 的情况,来得到 n 的情况。代码如下:class Solution { public int numTrees(int n) {

2017-10-06 06:27:40 132

原创 FTPrep, 95 Unique Binary Search Trees II, TODO: a little confused

这道题和下一道题 题面差不多,但是要求和方法都差别比较大, 适合对比分析。下一道题简单一些,用DP加上合适的naming 基本上不会错。

2017-10-06 06:22:24 121

原创 FTPrep, 94 Binary Tree Inorder Traversal, TODO: recursive 所有/部分 遍历的模版

递归的方法,too trivial,但是也是有原型的,就是inorder print。当然面试的时候不可能仅仅写recursive 至少要知道iterative的方法。Take away: 对于遍历所有节点,recursive & iterative both work. 但是对于partially 遍历 under certain conditions, 那就肯定要用iterative,比如

2017-10-05 13:58:10 234

原创 FTPrep, 93 Restore IP Addresses

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

2017-09-27 01:33:09 143

原创 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 134

原创 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 171

原创 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 139

原创 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 141

原创 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 153

原创 FTPrep, 86 Partition List

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

2017-09-26 13:39:08 144

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

todo

2017-09-26 13:31:01 132

原创 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 130

原创 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 139

原创 FTPrep, 82 Remove Duplicates from Sorted List II

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

2017-09-20 14:08:04 261

原创 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 150

原创 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 130

原创 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 26992

原创 FTPrep, 77 Combinations

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

2017-09-20 02:14:59 200

原创 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 205

原创 FTPrep, 75 Sort Colors

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

2017-09-20 00:54:14 223

原创 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 587

原创 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 210

原创 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 198

原创 FTPrep, 71 Simplify Path

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

2017-09-13 14:07:57 150

原创 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 123

空空如也

空空如也

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

TA关注的人

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