自定义博客皮肤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)
  • 收藏
  • 关注

原创 266 Palindrome Permutation

题目看懂了就很简单,最简单的理解就是统计string里字母出先的次数,只允许出现奇数次的字母最多一个,否则就返回false这是一个最基本的理解,代码很好写,一个小语法错误,几乎一遍通过。。。但是考虑的时候我想了下,应该有更简单的方法,不需要把整个string都遍历一遍,肯定有条件在中间就退出的。。。一会参考下别人的方法。。。一个朴素的,只打败15%的代码如下,有待优化public

2017-02-18 09:18:44 234

原创 202 Happy Number

昨天面完Google,坐等消息。。。同时又收到了Uber的面试邀请,接着做题。一道简单题,根据原有数不断缩减digit,得到一个新数,通过while loop来实现,如果新数是1那就返回true,否则继续以上过程。。。做的时候就在考虑如果一直不是1怎么办?果然超时,然后看参考,看到set立马就知道这是个循环出现的情况,要通过set来记录之前的值,如果在set中出现过,那就说明永远不能等

2017-02-18 08:58:48 216

原创 记录Google实习面试结束

昨天下午把Google实习加面搞定了,应该是我面的3次中发挥最好的一次,我给自己打90分,感觉应该是稳了。。。回想一下自己的准备过程,往往都是地毯式的复习,发力很强把能准备的都准备好,面试前是可以做到问心无愧,淡定从容的,不论遇到什么情况都可以镇定自若信心满满。。。有了这种心态才能在面试中与面试官积极主动交流,达到最好面试效果,要知道Google考察的是全方面的能力,不仅是做题,而且要考察你是

2017-02-18 02:03:53 1130 1

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

原创 286 Walls and Gates

这也是一道典型的dfs的题。。。和number of island很像,但是又有一些特点。。。刚刚了number of island,dfs的设计其实是为了销毁整个岛屿,起的是毁灭作用。。。主程序的话,还是在原来的方法里面实现,通过扫一遍grid,遇到了1就调用dfs这里呢,我可以很快想到,在主程序里面,扫一遍grid,遇到了0,就调用dfs,进行铺路!!对,这里的dfs就是铺路的作用。。

2017-02-16 14:13:25 363

原创 274 H-index

这题居然是medium,对我来说怎么那么intuitive呢?拿到是因为我经常关注paper引用率 : p就是排个序,然后从后面最高引用率开始 往前遍历,value数要大于等于len-index 这个数,不满足这个条件时就可以return啦。。。之前的代码:我不看,再写一遍。。。public class Solution { public int hIndex(int[

2017-02-16 13:23:02 170

原创 257 Binary Tree Paths

这道题是典型的dfs,为什么我第一眼看上去会想到的是backtracking... 可能我以为在添加完一个path后,要把最后的节点都给退回来。。。但这是愚蠢的啊,因为每个分支都是一个独立的str,不是一个backtracking中的list & list member 的处理,是不需要remove的。。。所以呢,想问题不能相入为主。。。不过这道题简直瞎子都知道是dfs,我脑子瞬间短路了。。。

2017-02-16 13:04:13 171

原创 253 Meeting Rooms II

这道题是求出需要的房子的最小个数。。。思路还是比较清晰的:1,start来决定房子的增加,start的先后顺序通过sort来解决。。2,end来决定房子可以不增加的情况,end的先后顺序通过PQ来解决。。每当有一堂课要加入时,只有上述两种情况,要么增加一个room,要么等最早结束的room空出来了可以加进去了。。。代码如下,我一眼不看,自己实现一遍:/** * Defin

2017-02-16 12:36:41 393

原创 200 Number of Islands

也是一道经典的 dfs的题目,我一眼都不看代码,试图自己从零开始写,看能不能一遍过。。。代码如下,捂住眼不看,哈哈public class Solution { public int numIslands(char[][] grid) { int count=0; for(int i=0; i<grid.length; i++){

2017-02-16 10:06:21 189

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

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

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

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

原创 54. Spiral Matrix

这是本人亲身经历,在google面试中遇到的一题,时间有限面试官只要求说下思路,我把思路和pseudo都展现出来了,还特别强调了了cycle 是取行列中的最小值,然后最后要判断这个较小值是奇数还是偶数,偶数的话搞定,奇数的话还要处理最中心残留的元素。。。然后还说了每个cycle消除两行两列,一个大的for loop保证转cycle个圈数,然后这个for loop里面有4个小for loop,每个小

2017-02-16 02:04:22 170

原创 50. Pow(x, n)

昨天3-4个小时写了12道题的强度,算是两个月以来最大强度,搞得我脑子直接罢工,下午提前回家,晚上一点做题的想法都没有。。。看来还是阈值太低,还得拉高拉高。。。明天就是google加面,今天就打算把做过的有google tag的题做一遍。。。到了面试,我觉得应该没有问题,哥的思路的交流风格都比较清晰,应变也还不错,想想google是哥的第一次面试就面得不错,FB第一面也从一开始的懵逼到问清楚问

2017-02-16 01:38:00 299

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

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

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

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

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

原创 22. Generate Parentheses

算是一道启蒙dfs的题,不是取所有解,而是在一定限定条件下取的部分解,而且就两个分支,所以就两个并列的 if 来代表。很熟悉了,再来过一遍手。。public class Solution { public List generateParenthesis(int n) {/* List result = new ArrayList(); it

2017-02-15 05:11:32 190

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

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

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

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

原创 16 3sum closest

思路应该和3sum一样,只是判断的条件不同,这里要求是最接近的,那么就需要维护一个变量,然后通过Math.abs()的大小来判断。。。下面的代码超时了,看这次能不能写好点:public class Solution { public int threeSumClosest(int[] nums, int target) { //无效输入 if(nums=

2017-02-15 01:52:23 177

原创 15 3sum

这道题,在准备FB第一面时也重复过,现在再来实现一遍,主要注意:不能有重复triplet,所以要滑过相同的元素,这是通过在++的基础上用while loop来实现。之前的代码如下:public class Solution { public List> threeSum(int[] nums) { List> list= new ArrayList<>();

2017-02-15 01:23:48 160

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

原创 11 container with most water

所谓的一道大俗题,通过夹逼法来做。。我第一次做的,还在墙上的纸上画了图,思考了好久。。。其实那个方法是优化的,在进行夹逼的过程中,进行了判断,是优化后的算法。。今天我写个一般的夹逼算法,然后再那个的基础上再进行优化public class Solution { public int maxArea(int[] height) {/* int most=0;

2017-02-14 15:31:59 163

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

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

原创 6 zigzag conversion

这种题看着就恶心。。。一点意思都没有。。。我刚开始的时候,还好认真的思考这种题,反复回味,在当时还是挺好的一种锻炼。。。本质上就是怎么把一个2D 矩阵的index进行重排。。。找到规律就好了。。。下面的代码太长了,我自己都不想看,烧脑子,而且没什么用。。。现在知道用更简便的方法了。。。public class Solution { public String convert

2017-02-14 13:34:36 161

原创 5 longest palindrome substring

第一眼看这题,只觉得要从中间开始向两端延伸,通过扫一遍所有的字母来实现。。。但是代码不是特别好写,因为有奇数和偶数的两种情况。。。既然这样,那就设计一个helper 方法,然后引入两个index,可以是相同的,代表奇数长度substring,也可以是相邻的,代表偶数长度substringpublic class Solution{private int lo, maxLen

2017-02-14 12:50:37 380

原创 3 Longest substring without repeating character

看了这题,其实我优点懵逼。。。没啥思路,也不知道第一次代码是参考了哪里写出来里的。。。但是看了code ganker的代码和解释后,豁然开朗,自己按照思路实现一遍就好。。。第一次代码如下,用一个char[] 来记录是否已经出现过某个字母。。。public class Solution { public int lengthOfLongestSubstring(String s) {

2017-02-14 12:14:22 462

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

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

原创 1st group anagram 49

典型的用HashMap来存单次。。。单词的解析码是所有字母排序相同的值。import java.util.List;import java.util.ArrayList;import java.util.Map;import java.util.HashMap;import java.util.Arrays;// import container 时,要import 接口和对

2017-02-11 01:14:49 202

原创 1st round, 78 Subsets

一道backtracking的启蒙作用的题,我还画了过程图在ppt,非常经典。。。public class Solution {    public List> subsets(int[] nums) {        List> result = new ArrayList>();        //if(nums==null || nums.length==0) ret

2017-02-11 00:57:56 244

原创 1st round, 494 Target Sum

dfs, 两个分支。。。加和是核心单元。。。public class Solution { public int findTargetSumWays(int[] nums, int S) { //int count=0; return dfs(nums, S, 0, 0); //return count; }

2017-02-11 00:45:43 188

原创 1st round, 236 Lowest Common Ancestor of a Binary Tree

这道题就是我上一篇中提到的返回 节点的题!!有必要写在一起,进行逻辑 和 代码结构上的对比!/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(in

2017-02-10 14:17:35 214

空空如也

空空如也

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

TA关注的人

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