GOOGLE实习加面准备:leetcode第一遍代码
文章平均质量分 74
SpartanLaser
这个作者很懒,什么都没留下…
展开
-
253 Meeting Rooms II
这道题是求出需要的房子的最小个数。。。思路还是比较清晰的:1,start来决定房子的增加,start的先后顺序通过sort来解决。。2,end来决定房子可以不增加的情况,end的先后顺序通过PQ来解决。。每当有一堂课要加入时,只有上述两种情况,要么增加一个room,要么等最早结束的room空出来了可以加进去了。。。代码如下,我一眼不看,自己实现一遍:/** * Defin原创 2017-02-16 12:36:41 · 405 阅读 · 0 评论 -
5 longest palindrome substring
第一眼看这题,只觉得要从中间开始向两端延伸,通过扫一遍所有的字母来实现。。。但是代码不是特别好写,因为有奇数和偶数的两种情况。。。既然这样,那就设计一个helper 方法,然后引入两个index,可以是相同的,代表奇数长度substring,也可以是相邻的,代表偶数长度substringpublic class Solution{private int lo, maxLen原创 2017-02-14 12:50:37 · 398 阅读 · 0 评论 -
21. Merge Two Sorted Lists
这道题,有点印象,大概思路就是原链头删,新链尾加,在原链头删的时候需要判断value大小。。。秒了一眼之前代码,略为繁琐,这次写简单点,先new 一个 dummy node,这样会好处理很多。。。/** * Definition for singly-linked list. * public class ListNode { * int val; * Li原创 2017-02-15 04:44:03 · 172 阅读 · 0 评论 -
22. Generate Parentheses
算是一道启蒙dfs的题,不是取所有解,而是在一定限定条件下取的部分解,而且就两个分支,所以就两个并列的 if 来代表。很熟悉了,再来过一遍手。。public class Solution { public List generateParenthesis(int n) {/* List result = new ArrayList(); it原创 2017-02-15 05:11:32 · 200 阅读 · 0 评论 -
24. Swap Nodes in Pairs
这道题,处理起来还有点小麻烦,关键是要next两次。。。稍微思考了一下,也是建一个dummy node,会方便很多。。。第一次代码,简易程度还可以,还写了很多总结,还是很认真的,哈哈:))代码如下:/** * Definition for singly-linked list. * public class ListNode { * int val; * Lis原创 2017-02-15 05:24:14 · 206 阅读 · 0 评论 -
26. Remove Duplicates from Sorted Array
纯过一遍手,两个指针,第一个扫描,第二个维护unique元素。。。public class Solution { public int removeDuplicates(int[] nums) {/* if(nums==null || nums.length==0) return 0; else if(nums.length==1) return原创 2017-02-15 05:54:34 · 182 阅读 · 0 评论 -
27. Remove Element
和上一道题类似,纯过手一次。。。秒杀的题。。。public class Solution { public int removeElement(int[] nums, int val) { /** * think and draw figure for 3 mins * very similar to remove dupli原创 2017-02-15 06:04:00 · 178 阅读 · 0 评论 -
28 Implement strStr()
这道题,完全没什么印象,看着也有点懵逼。。。先把代码粘过来,不看老代码,不收影响,从头想一个 de nove 的算法。。。public class Solution { public int strStr(String haystack, String needle) { if(haystack.length()<needle.length()) return -1原创 2017-02-15 06:13:39 · 261 阅读 · 0 评论 -
31 Next Permutation
说实话,看到这题完全懵逼。。。不知道当时是怎么写出来的。。。而且我今天一口气,3个小时写了12道题,大脑已经停止运转了。。。先把代码贴上,晚点再来搞定!import java.util.Arrays;public class Solution { public void nextPermutation(int[] nums) { if(nums==null原创 2017-02-15 15:26:10 · 200 阅读 · 0 评论 -
50. Pow(x, n)
昨天3-4个小时写了12道题的强度,算是两个月以来最大强度,搞得我脑子直接罢工,下午提前回家,晚上一点做题的想法都没有。。。看来还是阈值太低,还得拉高拉高。。。明天就是google加面,今天就打算把做过的有google tag的题做一遍。。。到了面试,我觉得应该没有问题,哥的思路的交流风格都比较清晰,应变也还不错,想想google是哥的第一次面试就面得不错,FB第一面也从一开始的懵逼到问清楚问原创 2017-02-16 01:38:00 · 309 阅读 · 0 评论 -
54. Spiral Matrix
这是本人亲身经历,在google面试中遇到的一题,时间有限面试官只要求说下思路,我把思路和pseudo都展现出来了,还特别强调了了cycle 是取行列中的最小值,然后最后要判断这个较小值是奇数还是偶数,偶数的话搞定,奇数的话还要处理最中心残留的元素。。。然后还说了每个cycle消除两行两列,一个大的for loop保证转cycle个圈数,然后这个for loop里面有4个小for loop,每个小原创 2017-02-16 02:04:22 · 180 阅读 · 0 评论 -
56 Merge Intervals
这是对我启蒙 OOD 题目的一道题,主要就是考一下你是否会定义Comparator,重载里面的public int compare(myClass c1, myClass c2) 的方法。。。通过把myClass的数组排序后,然后再按照题意提出算法。。。之前的代码如下:/** * Definition for an interval. * public class Interval {原创 2017-02-16 03:55:34 · 223 阅读 · 0 评论 -
139 Word Break
这道题是一道很不错的DP方法的示范例题。。。逻辑很清楚,通过一个多一个长度的数组,来记录每一个对应字母是否可以搭桥过去。 关键!!用对应数组来记录是否能够break成功。代码如下:public class Solution { public boolean wordBreak(String s, List wordDict) { int len=s.length()原创 2017-02-16 04:22:39 · 237 阅读 · 0 评论 -
66 Plus One
没啥好说的,很简单一道题。我就过个手。。。public class Solution { public int[] plusOne(int[] digits) { int len=digits.length; int advance=0; for(int i=len-1; i>=0; i--){ if(di原创 2017-02-16 07:23:15 · 218 阅读 · 0 评论 -
20. Valid Parentheses
每次遇到valid parenthesis的题目,就想到stack的结构来存储,因为判断这个左右匹配的题型涉及到,当前字符和之前字符的读取,所以需要stack来存储之前的数据。。。代码如下,再自己实现一遍:public class Solution { public boolean isValid(String s) {/* if(s==null || s.原创 2017-02-15 04:17:41 · 181 阅读 · 0 评论 -
19. Remove Nth Node From End of List
这道题,我当时就觉得很有意思,就是加尾巴原来是返回最后一个元素很容易,就是看.next==null? 那么倒数第二个就是.next.next==null? 现在是倒数第N个你怎么搞呢?其实就是说,要找到倒数第N个节点,那么最后,他会带有一个(N-1) 长度的尾巴,那么在一开始就把这个尾巴找到,然后就是一个window在整体移动,不是单个node在移动了,怎么实现?根据尾巴节点来实现。。题原创 2017-02-15 02:50:42 · 180 阅读 · 0 评论 -
17 phone number
做过N次的题,这里全当过一遍:public class Solution { public List letterCombinations(String digits) { List list = new ArrayList<>(); if(digits==null || digits.equals("")) return list;原创 2017-02-15 02:31:12 · 218 阅读 · 0 评论 -
257 Binary Tree Paths
这道题是典型的dfs,为什么我第一眼看上去会想到的是backtracking... 可能我以为在添加完一个path后,要把最后的节点都给退回来。。。但这是愚蠢的啊,因为每个分支都是一个独立的str,不是一个backtracking中的list & list member 的处理,是不需要remove的。。。所以呢,想问题不能相入为主。。。不过这道题简直瞎子都知道是dfs,我脑子瞬间短路了。。。原创 2017-02-16 13:04:13 · 178 阅读 · 0 评论 -
314 Binary Tree Vertical Order Traversal
一道老题了啊。。。思路大概如下。。实现起来还是要细心的1,层序遍历,通过一个Queue来收集所有的Node,同时需要同样一个Quene,来收集所有匹配的level2,通过while(queue.isEmpty()) 来一直pop出一个一头元素,相应信息要进入到map中去,然后根据该元素节点,时候有左,右子树来进行,继续添加node和level信息便利结束后,所有节点信息都收到map中了原创 2017-02-16 15:10:20 · 289 阅读 · 0 评论 -
记录Google实习面试结束
昨天下午把Google实习加面搞定了,应该是我面的3次中发挥最好的一次,我给自己打90分,感觉应该是稳了。。。回想一下自己的准备过程,往往都是地毯式的复习,发力很强把能准备的都准备好,面试前是可以做到问心无愧,淡定从容的,不论遇到什么情况都可以镇定自若信心满满。。。有了这种心态才能在面试中与面试官积极主动交流,达到最好面试效果,要知道Google考察的是全方面的能力,不仅是做题,而且要考察你是原创 2017-02-18 02:03:53 · 1157 阅读 · 1 评论 -
1 twoSum
其实也不知道是第一次还是第二次写了,好像上周准备FB时也写过一次。。。anyway,先贴过来,自己速度练习。。。public class Solution { public int[] twoSum(int[] nums, int target) { // solution 1, O(N*N) /* if(nums.length<=1) return n原创 2017-02-14 10:57:40 · 185 阅读 · 0 评论 -
2 addTwoNumber
汗。。。第一次的代码这么长。。。看第二次能不能简练一些。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class原创 2017-02-14 11:12:48 · 271 阅读 · 0 评论 -
3 Longest substring without repeating character
看了这题,其实我优点懵逼。。。没啥思路,也不知道第一次代码是参考了哪里写出来里的。。。但是看了code ganker的代码和解释后,豁然开朗,自己按照思路实现一遍就好。。。第一次代码如下,用一个char[] 来记录是否已经出现过某个字母。。。public class Solution { public int lengthOfLongestSubstring(String s) {原创 2017-02-14 12:14:22 · 468 阅读 · 0 评论 -
6 zigzag conversion
这种题看着就恶心。。。一点意思都没有。。。我刚开始的时候,还好认真的思考这种题,反复回味,在当时还是挺好的一种锻炼。。。本质上就是怎么把一个2D 矩阵的index进行重排。。。找到规律就好了。。。下面的代码太长了,我自己都不想看,烧脑子,而且没什么用。。。现在知道用更简便的方法了。。。public class Solution { public String convert原创 2017-02-14 13:34:36 · 170 阅读 · 0 评论 -
7 reverse integer
思路很平常,从低位缩短 输入数,从高位生成输入数。。。但是代码有点冗长,可以进行简化。。public class Solution { private static final int maxDiv10=Integer.MAX_VALUE/10; private static final int minDiv10=(-1)*maxDiv10; public原创 2017-02-14 14:37:54 · 157 阅读 · 0 评论 -
9 palindrome number
这道题我之前有印象了,就是通过reverse integer的思路来判断其实吧,可以触类旁通,凡事判断整个输入是不是palindrome的题,都可以用reverse的思路来做,如同 link listpublic class Solution { public boolean isPalindrome(int x) {/* if(x==0) return t原创 2017-02-14 15:05:29 · 189 阅读 · 0 评论 -
11 container with most water
所谓的一道大俗题,通过夹逼法来做。。我第一次做的,还在墙上的纸上画了图,思考了好久。。。其实那个方法是优化的,在进行夹逼的过程中,进行了判断,是优化后的算法。。今天我写个一般的夹逼算法,然后再那个的基础上再进行优化public class Solution { public int maxArea(int[] height) {/* int most=0;原创 2017-02-14 15:31:59 · 170 阅读 · 0 评论 -
14 longest prefix
一眼看上去,不觉得是easy的题,还涉及到一些对题目的理解和具体条件的判定。。。但整个思路还是比较明显:以任意一个str为参照,遍历所有string,需满足两个条件:1,长度存在;2,字符相等。public class Solution { public String longestCommonPrefix(String[] strs) { if(strs==n原创 2017-02-15 01:10:27 · 169 阅读 · 0 评论 -
15 3sum
这道题,在准备FB第一面时也重复过,现在再来实现一遍,主要注意:不能有重复triplet,所以要滑过相同的元素,这是通过在++的基础上用while loop来实现。之前的代码如下:public class Solution { public List> threeSum(int[] nums) { List> list= new ArrayList<>();原创 2017-02-15 01:23:48 · 168 阅读 · 0 评论 -
16 3sum closest
思路应该和3sum一样,只是判断的条件不同,这里要求是最接近的,那么就需要维护一个变量,然后通过Math.abs()的大小来判断。。。下面的代码超时了,看这次能不能写好点:public class Solution { public int threeSumClosest(int[] nums, int target) { //无效输入 if(nums=原创 2017-02-15 01:52:23 · 186 阅读 · 0 评论 -
173. Binary Search Tree Iterator
这是一道OOD的题目,通过自己打包已经就绪的一些数据结构,进行iterator的设计,这里是对BST设计interator我很傻很天真的用了一个Queue来实现,也就是把BST线性化,可是题目要求的是存储空间是O(h),h是BST的高度,而我的方法用了O(n)BUT 还是先把码贴过来,自己在实现一遍,最后实现O(h)的方法。/** * Definition for binary tr原创 2017-02-16 07:55:27 · 176 阅读 · 0 评论