FTPrep
文章平均质量分 67
SpartanLaser
这个作者很懒,什么都没留下…
展开
-
FTPrep, 5 Longest Palindromic Substring
刚看到题,只有一个思路,以某个字母为中心向两边逐拓展的思路,然后这个中心从头到尾都过一遍,然后与之前的最优结果对比,进行更新。。参考了一下别人的代码结构,通过一个helper 方法,代码简单了不少,其实思路也应该是在不 中心不断移动的时候,都会去通过 helper函数找到该中心的最大自串。要注意的点:1,中心可以是单个字母,也可以是相邻的2个字母,这都符合palindromic,所以在i的原创 2017-07-10 15:30:27 · 136 阅读 · 0 评论 -
FTPrep, 6 Zigzag conversion
看到这题,第一反应还是第一次做时,特别长的代码和在纸上反复画图找规律的印象。。。那显然不是应该出现的解法,但是还是很清楚的思路。参靠了之前的算法,代码和思路瞬间清楚,抓住几个关键点,1分钟搞定,关键还是要有画面感1,看出重复区的大小是 jump = (2*rowNums - 2),这个是非常显而易见且有用的。visualization的话就是,每一个这个大小的substring 从水平变成原创 2017-07-11 15:04:17 · 138 阅读 · 0 评论 -
FTPrep, 8 atoi
和上一题 reverse integer 有类似之处,但还多了几个checking的地方:1,trim leading and trailing whitespace, just use str.trim()2,check the 1st letter.3,check char type must be digit, there should be a function, but it原创 2017-07-12 12:35:38 · 140 阅读 · 0 评论 -
FTPrep, 12 Integer to Roman
思路还是有的,后来对比了下之前的代码,发现思路是一样的。用构建divider被除数的方法,把各个 被除数 列出来,将其对应的罗马数字符号一起,构建好一个map,很不幸,只能手动加map里的项目,不能初始化。。那就不断put吧。剩下的就是 从小到达遍历 key的数字,很不幸,map.ketSet() 是一个set,不能按照排序来做。所以还得建一个int array,一次列好数字。通过遍历这个原创 2017-07-13 12:38:44 · 153 阅读 · 0 评论 -
FTPrep, 9 Palindrome Number
顺接reverse integer的思路,来解答很容易:1,把后半部进行reverse,新数不断增加,旧数不断减小,如果是回文,有奇数长度和偶数长度两种,奇数的话 新数最后退出循环会多一位,偶数的话新旧两数相等。2,唯一关键的点是!!!以0结尾但不是零的数,要特殊的考虑的。3,负数不用考虑,问清楚面试官即可。80%, easy case,代码:public class Solu原创 2017-07-12 12:54:33 · 148 阅读 · 0 评论 -
FTPrep, 13 Roman to integer
于上一题相反,但是套路有变,相同的地方是维护一个table,但这个table只要有7 罗马数字的symbol,重点是:遍历每个字母时,比较它和它左边字母所对应的数字的大小关系,如果是小于等于那就是正常的加法,如果是大于,就是减法。代码上注意的两点:1,单个字母的string。string是从右到左遍历。2,map的key是字母,而不是string的index,所以:string+ind原创 2017-07-13 13:04:56 · 199 阅读 · 0 评论 -
FTPrep, 1 Two Sum
时隔4月,开始准别全职刷题。初步计划,把之前做过的题目,1-2周复习一遍,那就是有150左右了。剩下的6-8周时间,做新题,准备把那几家都面一遍。从第一题开始TwoSumpublic class Solution { public int[] twoSum(int[] nums, int target) { int[] result= new int[2];原创 2017-07-05 00:11:47 · 161 阅读 · 0 评论 -
FTPrep, 10 container with most water
可能由于之前看了个不对的图,老把这题想成了 一个个的bar,但是其实是 一个个的点向下引垂线!所以要换个头脑中的image,所以就不用考虑中间的线了,如果是bar那么还要把bar所占的空间给去掉,那就是不是这题的本意了。思路简单,夹逼法,类似2sum的思路。哪边较小,则移动哪边,下面的代码很简单,但是效率不高才15%,因为中间不用每次循环都进行update maxArea,只有但index移动原创 2017-07-12 14:10:38 · 202 阅读 · 0 评论 -
FTPrep: 16, 3Sum Closet
在3Sum思路的基础上衍生。。但因为不需要返回单个值,只要一个sum,所以不需要helper function,主要的判断条件是用diff来判断的,用于结果的更新,注意 diff 和 sum是成对的,两者同步更新,diff是状态判断值,sum是目标值。同时,左右两个index的移动还是按照sum与target 大小的比较来移动的。当然如果两者 ==,那就直接return了代码效率50%原创 2017-07-14 15:05:32 · 198 阅读 · 0 评论 -
FTPrep, 7 reverse integer
处理这题,就是要注意最大值和最小值。。不要慌!1,先转化成正数,前提是该数不是MIN_VALUE。然后就按照正数的方法来处理。2,然后要把overflow的条件写好,不能正着写,要反正写,见下面代码,然后大于小于的方向别搞反了。代码:public class Solution { public int reverse(int x) { if(x==Integer原创 2017-07-11 15:26:12 · 150 阅读 · 0 评论 -
FTPrep, 14 Longest Common Prefix
昨天写过的,忘发博客了思路很简单,以第一个str为reference,扫过其每一个index i,如果出现了i 超越了其他str的 index范围(有比reference更短的str),或者有str 的相同index的字母不相等,则可以返回了,只要主要这两个判断条件,写好两个循环就可以了。代码:public class Solution { public String long原创 2017-07-14 15:16:55 · 170 阅读 · 0 评论 -
FTPrep, 3 Longest Substring Without Repeating Characters
实习压力还是比较大,想要把项目做好,就得保持效率,晚上回来其实空闲的时间并不多,而且头昏脑胀,思路不清晰。。刚性限制难以突破。。。LongestSubstringWithoutRepeatingCharacters 这题开始的思路很快,就是要用set来帮助判断是不是有repeating character。具体的:不断往hashset里加入char,如果add()返回 false,说明有重复,原创 2017-07-06 13:40:48 · 203 阅读 · 0 评论 -
FTPrep, 17 letter combination of a phone number
感觉做过无数次,但是写起来还是不敢说 一次 bug-free 写出来。写的过程中,对dfs的写法犹豫了,把branch写成了一个list的类型,但发现这样写不通,才反应过来要把list放在参数里,设计成void类型,return是在list.add()动作完成后。写得时候是不是在这个地方return,犹豫了,虽然AC了,但是过程没有特别清楚。在纸上画了下流程图,才确信了。见PPT。这个过程原创 2017-07-16 02:35:21 · 340 阅读 · 0 评论 -
FTPrep, 15 3Sum
老题了,基本思路就那样。。但还是有点虚,主要是细节上的处理还是不是特别清楚,还需要多练。。思路:1,以2Sum为基础,作为一个helper function来用。特别注意,当在==时,需要更新list,因为不能有duplicates,所以在==时的index更新要判断相邻index所对应的值,直到有一个不想等的值。2,有了2Sum helper function 作为基础,剩下就是从0原创 2017-07-14 14:22:34 · 189 阅读 · 0 评论 -
FTPrep, 18 4Sum
首先回忆了一下3Sum。每次看到xSum的题,有种总会有bug的感觉,主要是这几个点:1,3Sum用2Sum的方法,2Sum收集两个数,list里面的item都是两个元素,如果收集3元素的item?嗯,应该在每次完成一个index时,把该index对应的数字添加到2Sum list中的每一个2-tuple,形成了3-tuple,加入最终finalList结构应该是:for( i: 0原创 2017-07-16 03:02:57 · 256 阅读 · 0 评论 -
FTPrep, 19 Remove Nth Node From End of List
老题一道,拿到手有点生疏,把思路理清了,一次写完,非常爽。只有一个小bug,在用listNode的constructor的时候,没有传入一个参数。。真正面试时没有看清class的interface会吃亏的的。。思路:把这个n想成是 尾巴的起头,平时说倒数1个,那么尾巴长度就是1,最后一个node就是这个尾巴的起头。倒数第二个,那么尾巴长度就是2,倒数第二个就是这个长度为2的尾巴的头。所以是n的原创 2017-07-20 14:55:29 · 160 阅读 · 0 评论 -
FTPrep, 4 Median of Two Sorted Arrays
一看题,无思路, 参考别人方法,才瞬间反应就是merge sort里的 merge过程,即:从2个sorted array 挨个对比,新建一个array来存储merge array。sorted array都有index,如果被选中(看谁的element更小),index++。要注意的是index的范围,所以这个选中的前提是index1&2都是in range!如果有一个index到头了,那么就是原创 2017-07-09 15:58:56 · 187 阅读 · 0 评论 -
FTPrep, 30 Substring with Concatenation of All Words
写这到hard之前,据说要先写一个道 简单对照物 来热身,于是5mins 完成了这段断代码,是LC第3题,Longest Substring Without Repeating Characterspublic class Solution { public int lengthOfLongestSubstring(String s) { int len = s.len原创 2017-08-08 14:27:52 · 157 阅读 · 0 评论 -
FTPrep, 46 Permutations
TODO:1. 具体的过程,每个递归调用都会遍历一次数组,这个要形成视觉化的概念,就很容易和实际选择排列的方式一样2. 这是NP 问题,类似的题目有 combination,N-queen等等,ganker有比较好的总结,类似的题目放在一起总结才好记忆!10'20'' 没有立马想到used这个变量来维护选择过的元素,非常机智,等于就是在Combination Sum的解法的基础上,多加原创 2017-08-16 14:39:51 · 138 阅读 · 0 评论 -
FTPrep, 31 Next Permutation
虽说有permutation,其实和其他有permutation字眼的词的题 套路不一样。这其实是个数学题,关键是发现permutation 的排序规律,然后按照这个规律,逆向解题。思路:1,从后往前,相邻梁元素比较,找到第一个降序的相邻一对。2,从降序往后找到最小的比它大的数(因为后面都是升序的,从右到左的升序)。3,找到后和1中的元素呼唤位置;4,最简单的,从i+1 到最后一个元素逆序原创 2017-08-09 15:16:45 · 180 阅读 · 0 评论 -
FTPrep, 33 Search in Rotated Sorted Array
今晚状态不错,注意力非常集中,于是很冲动地说要把每道题都one-time bug-free,直到成功下面的代码写了两遍,都进行秒表计时,4'58'' AC代码如下,最为基本的二分法的搜索,在判断完mid是否相等之后,不能马上进行left 和 right的更新,因为还不能确定target 到底在哪一边,所以还要进行哪一边order的判断。在进行左边是否ordered的时候要注意可以有 [le原创 2017-08-11 13:46:33 · 168 阅读 · 0 评论 -
FTPrep, 34 Search for a range
10'12'' AC one-time bug free这题是参考了别人的解答。对二分法玩得是出神入化。思路:找到左端点,和右端点,通过两次二分法分别找到!现在来分析下这两个断点的特点是什么:左端点左边肯定不是target,右端点的右边也肯定不是target。为了找到对应这两个特征的index,就要在left和right的更新条件上设计。又考虑到left和right会交叉,也就是right原创 2017-08-11 15:02:50 · 142 阅读 · 0 评论 -
FTPrep, 47 Permutation II
TODO:1. Illustrate how the permutation process works, steps, how to implement. Permutation I is the basis, based on which other kinds of permutation variant needs a little modification/change.2. B原创 2017-08-19 15:44:19 · 183 阅读 · 0 评论 -
FTPrep, 35 Search Insert Position
TODO: 1. insertion position is always left2. moving patterns, using concrete examples.代码:public class Solution { public int searchInsert(int[] nums, int target) { int len=nums.原创 2017-08-13 00:50:49 · 147 阅读 · 0 评论 -
FTPrep, 36 Valid Sudoku
TODO: 直到第三次 one-time bug-free 的记录,copy 过来代码1:public class Solution { public boolean isValidSudoku(char[][] board) { if(board.length!=9 || board[0].length!=9) return false;原创 2017-08-13 01:58:34 · 172 阅读 · 0 评论 -
FTPrep, 37 Sukodu Solver
TODO: the explanation for the flow1, recursive function: 3 key points2, naming is important for logic and debugging, always having a good variable name3, one-time bug free is left to do, first t原创 2017-08-13 05:59:20 · 267 阅读 · 0 评论 -
FTPrep, 38 Read and Count
TODO:1, logic: use helper function, to read once, and transform the str; the need to transform the string for n time2, in the helper function, use StringBuilder and append(), to generate a new str原创 2017-08-13 06:37:26 · 679 阅读 · 0 评论 -
FTPrep, 39 Combination Sum
TODO:1, 分析前几次的代码,抓bug 分析理解错误。2, 描述过程,知道过程才会在 当题目有所变化的时候 知道在那行代码加什么东西,所以啊!!写程序程序,本质就是过程,programming 就是一个流程的设计。3, 这一类就叫做backtracking,backtracking,有2个特点:1,添加元素是最后的动作,记得是make a copy,而不是本身,谨记java里都pa原创 2017-08-13 08:41:44 · 147 阅读 · 0 评论 -
FTPrep, Combination Sum II
TODO:1,思路对比和上一题2,两题的细节对比;1)这题不能重复取数,2)但是有重复元素,可以都取,陷阱:重复数都相邻(因为排序了)除了第一个元素,其他的元素都可以pass不考虑,因为在这一排所有相同元素中第一个元素那里都考虑过了,如果在考虑就会出现重复结果。所以pass的话就用 if() continue就行了。代码:public class Solution { pu原创 2017-08-13 09:06:20 · 232 阅读 · 0 评论 -
FTPrep, 20 Valid Parentheses
最直接的想法,存一个map,把左括号和右括号,作为key/value这两类的char储存进去。然后遍历string的时候,check是左括号( map.keySet().contains(ch)) 那就push进stack,如果不是key的话,检查两个条件,1 stack如果为空 return false,2如果不为空,这个时候肯定要pop出来,所以不要用peek了,直接pop,如果不是 key原创 2017-08-06 02:10:14 · 228 阅读 · 0 评论 -
FTPrep, 21 Merge Two Sorted Lists
拿到手首先想到的就是所谓有的头删法+尾插法。因为是两个list同时头删,要判断 是否两个list都非空,如果都是非null才能循环进行。就有while里面的条件判断。剩下的就是哪个还有就直接连上,代码如下:public class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) {原创 2017-08-06 05:32:47 · 200 阅读 · 0 评论 -
FTPrep, 23 Merge k sorted list
一道hard题,首先用的这个递归的方法,确实很难一次想到,基本只能看了一遍后好好理解,再记忆。记忆思路:1,有了merge2Lists的方法,是一个可以利用的基础。merge2Lists:http://blog.csdn.net/laserljy123/article/details/767378062,利用这个融合2个list的方法,把一个长的list array,通过分治的思路,切原创 2017-08-06 15:27:21 · 270 阅读 · 0 评论 -
FTPrep, 42 Trapping Rain Water
标题类似,实际不一样的题,只求两个bar形成的container能装下最大体积的水:点击打开链接TODO:1,看了图形后很容易被诱导到错误思路,最好的思路其实是单个位置的水的求解2,简单的动态规划的思路,找到每个点的leftBar和rightBar,且i位置的bar和前一个以为的bar以及本身有明确的关系。用一个同样大小的数组来维护。3,每个点的水位由3个点决定:leftBar,r原创 2017-08-14 04:37:52 · 144 阅读 · 0 评论 -
FTPrep, 2 Add Two Numbers
这道题的思路很简单,但是在实现起来还是有点 not intuitive, 参考了一下别人代码,才有感觉:1,基本思路是:两条链条的同步后移,这个问题就是每个iteration,移动就好,但是这里要注意了,如果指针已经是null,那就是保持不用变化2,不断后移的终止条件其实很简单,就是有一方null了,然后就可以考虑直接copy另一条链的剩下值。“不断”两字,可能就是用while() 来实现原创 2017-07-05 02:20:57 · 243 阅读 · 0 评论 -
FTPrep, 48 Rotate Image
3' 很快完成了,因为每个点都有以同一个通项公式进行转化,非常简单。但是这个有extra space,所以follow up 是O(1) 的空间怎么搞?代码:class Solution { public void rotate(int[][] matrix) { int len=matrix.length; if(len==0) return;原创 2017-08-21 14:02:05 · 141 阅读 · 0 评论 -
TODO: FTPrep: 43 Multiply Strings
没思路,酝酿一会再做。原创 2017-08-14 04:56:07 · 179 阅读 · 0 评论 -
FTPrep, 24 Swap Nodes in Pairs
很简单一道题,平铺直述的做法就是按照list的数据结构来做。之后按照递归的做法做一下,受前面merge2List的递归的启发,充分挖掘list的深层的结构特点,也就是说list的处理一般都可以用递归,就看你能不能凑齐递归的三要素。3 min bug-free/** * Definition for singly-linked list. * public class ListNode原创 2017-08-07 13:11:43 · 164 阅读 · 0 评论 -
FTPrep, 25 Reverse Nodes in k-Group
可能是因为总结了 Swap Nodes那道题的两种解法,这道hard题其实也不hard。心里很清楚只要是list相关的题都能用递归处理,找准三要素即可:1,出口;2,只关注当前情况,把之后要处理的当作一个整体,这个整体就是递归call函数本身;3,递归点,即2中的整体部分就是通过递归得到的。代码如下,10min bug-free,提交时也比较有信心,因为有swap node那道题作为原型:1,原创 2017-08-07 14:04:13 · 139 阅读 · 0 评论 -
FTPrep, 26 Remove Duplicates from Sorted Array
easy的题,给点时间总能搞出来,速度的话就看熟悉程度了。这题和下一道,remove target val异曲同工。有一定的迷惑性,不易直接写出来就是因为有remove的字眼。真正对的思路其实应该是 看keep哪些元素,选择keep下来的元素有哪些,这样的话思路才顺。一个scan指针,一个keep指针。public class Solution { public int rem原创 2017-08-07 14:31:41 · 168 阅读 · 0 评论 -
FTPrep, 27 Remove Element
这道参考前一道题:点击打开链接public class Solution { public int removeElement(int[] nums, int val) { int len=nums.length; if(len==0) return 0; int keep=0; for(int scan=0; scan<原创 2017-08-07 14:34:18 · 148 阅读 · 0 评论