自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 8 String to Integer (atoi)

在C++中有一个自带函数 atoi (表示 ascii to integer),更直白的收就是把String转化成 integer,这属于字符串处理的一大类题型。之前做过同类型的题有:roman to integer,excel column to integer,在分类题型的ppt中自己总结了一下。。这里简单提几点肯定会用的方法:1,str.charAt(index) 扫描string;2,

2017-03-28 03:19:24 219

原创 254 Factor Combinations

非常好的一道Backtracking的题,需要对这个方法有深刻的了解,和对Factor形成的过程产生一个相应的 巧妙的算法。。 过了很久看到这题,也不是马上就有具体的代码实现方案,只是模糊觉得backtracking。看了之前的代码,还发现一个非常关键的点,就是在不断递归的过程中,每个状态都需要进行输出,放到结果当中,这个时候就需要进行 new ArrrayList<>(current) 对cu

2017-03-27 11:11:59 263

原创 22 Generate Parentheses

DFS 经典老题一道。 就是有两个分支,加左括号和加右括号,剪切条件在 分支里一次写清楚,very compact and synthesized 之前的代码: public class Solution { public List generateParenthesis(int n) { List result= new ArrayList(); d

2017-03-27 03:31:03 229

原创 49 Group Anagrams

真没什么好说的,也是道做烂了的题。。。 可以总结的就是,这道题属于一类大题:通过某个小方法 转化 string to string,因为不同的input string可以得到同一个 output string,可以根据output string 来进行集合。。。再说得浓缩点:建立 多对一 的关系,然后用HashMap存放,key是 一, value 是 多。 亲历的Google面试就遇到了类似

2017-03-27 03:13:54 170

原创 54 Spiral Matrix

做了N遍的题,思路直接,special case 明确, 顺时针旋转,cycle数个循环,大循环内部4个小循环表示方向,最后要check最中间是否还留了一部分,直接上代码。。。 之前的代码: public class Solution { public List spiralOrder(int[][] matrix) { List list = new ArrayLi

2017-03-27 02:24:44 222

原创 17 Letter Combinations of a Phone Number

这道题做了很多次了,dfs的经典题目。 之前的代码: public class Solution { public List letterCombinations(String digits) { List result= new ArrayList<>(); if(digits.equals("")) return result; // 这里要判断一下

2017-03-26 14:58:18 247

原创 155 Min Stack

之前的代码: public class MinStack { /** initialize your data structure here. */ List list; PriorityQueue queue; public MinStack() { list= new ArrayList(); queue= new

2017-03-26 14:28:20 217

原创 171 Excel Sheet Column Number

先不说细节,分类上来说,就是把string 转化成 int的题型,那不就是 roman to integer么。。。 是的,都是这一类的,那么解法也就一样了。。。把string遍历一遍,遍历的同时更新result,关键是找到 这个变化规律,用代码来实现。。。 之前的代码: public class Solution { public int titleToNumber(String

2017-03-26 13:57:20 339

原创 206 Reverse Linked List

一道自己很为津津乐道的题,因为在一次校招会上直接被面试面到了,别的同学说用stack,但是那样要多余空间,且遍历俩次。。。 我当时就说了in place one pass的做法,所以那点优越感让我记得了这道题,简单单纯的少年。。。 之前的代码: /** * Definition for singly-linked list. * public class ListNode { *

2017-03-26 13:40:58 172

原创 121 Best Time to Buy and Sell Stock

以前的代码,serious boy public class Solution { public int maxProfit(int[] prices) { /* int len= prices.length; int min=prices[0]; //int minIndex=0; int max=0; fo

2017-03-26 13:22:49 162

原创 111 Minimum Depth of Binary Tree

我当时还把这两道题放在一起考过别人,就是为了迷惑对方,以为把max改成min就行,这就是典型的错误的理解,因为只有当左子和右子都不为null时才能有min,只有一个为null,那么depth因为就是另一分支。。。说到底,还是要非常明确minDepth的定义:从root到叶子节点最短的分支,所包含的节点的个数。。。 这题和上一题都是递归调用自身。 之前的代码,I am a 认真 boy: /*

2017-03-26 12:14:56 154

原创 104 Maximum Depth of Binary Tree

这题我还考过别人,试图用一句code完成,然后结合minDepth放在一起考别人。。下一题写minDepth 之前的代码,好大一段,我确实是个认真boy。。。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tree

2017-03-26 09:29:58 275

原创 290 Word Pattern

这道题的出现频率还挺高! 之前的代码,有点啰嗦:1,不用把String转array呀,String用 charAt() 就可以遍历;2,用了两个map来分别存element: index;3,value可以不用是size,可以是第一次出现在元序列的index public class Solution { public boolean wordPattern(String patter

2017-03-26 08:18:30 418

原创 266 Palindrome Permutation

理解了题意,化简的意思就是,出现次数为奇数的字母 的数量不能超过1个。。 我之前的代码就是按这个思路写的,要过一次string,还要过一次map,效率只有10-20%; public class Solution { public boolean canPermutePalindrome(String s) { Map map = new HashMap<>();

2017-03-26 07:19:17 247

原创 242 Valid Anagram

请在3分钟之内写完。 之前代码: public class Solution { public boolean isAnagram(String s, String t) { char[] ss=s.toCharArray(); Arrays.sort(ss); char[] tt=t.toCharArray(); Arr

2017-03-26 06:45:43 262

原创 202 Happy Number

一道简单题,之前做的时候就印象比较深刻。 要实现的数字转化A to B 很简单,关键是如何判断是不是happy:是很好判断,但是什么是不是呢? 这就是涉及到到 A to B, B to C, C to .... 一直进行下去,有回到A, B, C中的任何一个都形成一个 loop/cycle 那就不会到1,所以转化成了 查询 重复值 的问题了。 以前的代码: public class Sol

2017-03-26 06:27:31 252

原创 13 Roman to Integer

其实还有点小意思,就String和Integer之间的数字转化, 把罗马数字String和Integer之间的转化规律用代码表示出来。。。 罗马数字规律:1,大方向:从左到右,所以用for loop + string.charAt(index) 来实现string的遍历;2,大多数情况,左大右小,是加法,所以大小判断要有数值,用HashMap来实现转化;3,如果是左小右大,那就是减法。就这三点,

2017-03-26 02:42:11 490

原创 1 Two Sum

这题到处都有。。。无语。。。 我看到了就只能在联系一遍。。。 之前代码:public class Solution { public int[] twoSum(int[] nums, int target) { HashMap map= new HashMap<>(); int[] result= new int[2]; for(int

2017-03-26 02:13:54 218

原创 125 Valid Palindrome

之前代码: public class Solution { public boolean isPalindrome(String s) { if(s==null) return false; if(s.equals("")) return true; int len=s.length(); int left

2017-03-26 01:55:19 194

原创 149 Max Points on a Line

做这道题是看到一亩三分地的面经,PhD找Uber SE 暑期实习,卧槽面了两道hard和一道系统设计,果然要求不一样,估计工资也不同吧。。。 此题为hard:1是因为解法不明显,2找到解法后还有些细节要处理,具体见代码。一开始是没有思路的,参考了code ganker大神的代码,重新实现一遍,也改了一个小瑕疵,就是加了 (long),不加的话leetcode上最后3个test case跑不过,于

2017-03-22 13:59:40 259

原创 42 Trapping Rain Water 【基本解法和优化方法】

这题挺有意思。最naive的想法就是看每个位置左右两边的bar的高低,然后来决定当前位置能装多少水。有意思的地方在于,每个位置的组左右高度,不是其相邻位置的高度,而是整个左边部分和右边部分的最大值!这是一个最关键的规律,发现了规律,就可以顺利解题了,剩下的事情就是用什么算法来实现,算法的效率复杂度的区别了。 最直接的方法,遍历每一个元素,在扫一遍左右两边,找到左右最大值,然后取较小值,就找到了t

2017-03-22 03:06:54 1217

原创 37 Sudoku Solver

接着上一道题,在此基础上,求sudoku的解法。虽说是一道hard题,有了前面的基础,加上正确的思路和backtracking的设计,还是比较好理解的。 基本的思路还是:遇到 . 的空格就把1-9的数字都尝试一遍,这就相当于分支呀,for loop来实现。然后要判定数字是否符合,那么就是要进行分支的筛选/剪切,这个符合条件就得写一个其他函数,isValid。再之后如果符合,就走到下一个格子,同时

2017-03-21 06:56:00 289

原创 36 Valid Sudoku

接下来写两道题,Valid Sudoku 和 Sudoku Solver,分别是判断现有的九宫格是否符合要求,和 求出九宫格的解法。 Valid Sudoku 之前写过两次,第一次是很naive的写法,通过很new出一个新的array来检查duplicates的element,因为那时还不知道HashSet这么好用的东东。 第二次是用到了HashSet,并且学到一个很好用的方法,set.add

2017-03-21 05:45:57 193

原创 145 Binary Tree Postorder Traversal

最后一个,后序遍历,postorder 递归解法的代码如下: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; }

2017-03-20 14:53:35 248

原创 144 Binary Tree Preorder Traversal

先把递归解法的代码贴上: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public clas

2017-03-20 14:13:47 194

原创 94 Binary Tree Inorder Traversal 【递归和迭代的对比较分析】

一道很常规的二叉树遍历题,相信大家都在课上学习过。 但是题目要求是不能用递归调用的方法,也就是课上讲过的方法。要用iterative迭代的方法,也就是一个一个找,通过while循环来输出。 先把递归的方法代码写出来,如下。要注意的是,我连递归调用都不能立马想起来,只想到了当node是null时,什么都不用做。那么当不是null的时候呢?其实就是按照preorder的顺序,摆放的三行代码即可,怎

2017-03-20 13:31:52 293

原创 1 2Sum 【分析总结,归类记忆】

作为leetcod开篇第一题,一定被大家熟知,解法也有多种:1,夹逼法,复杂度:NlogN+N;2,HashMap法,N,因为用空间换时间;(其实是N平方,但是利用了HashMap中查询操作复杂度为1,把N变为了1,所有就有 N*N -> N*1) 写在这里,是因为和上一道first bad version 解法类似,归类在一起,下面是夹逼法解题,时间复杂度是NlogN,空间复杂度为1,代码如下

2017-03-20 01:45:44 325

原创 278 First Bad Version 【拓展分析,自己出题】

前面5道题都是围绕 rotated sorted array来展开,是二分法解题的一种拓展。跳出这个 rotated sorted array 是否还有别的二分法拓展解题呢?我想到了两个:1,本题,first bad version;2,two sum two sum 很明显,先进行排序,得到了sort array;first bad version呢?本质上也是一样的,左边所有都是good v

2017-03-20 01:04:24 304

原创 154 Find Minimum in Rotated Sorted Array II

接着上一题来,在带有 duplicates的 rotated sorted array 找最小数。 基本思路和不带duplicate一样,不带duplicates的情况,只要判断两个条件:1,左边递增;2,右边递增。对应的去更新left和right,关键的解决方案就是当left==right时,就是找到的min。 带有duplicates的话,就加一个判断条件,else来表示,这个时候righ

2017-03-19 06:50:47 187

原创 81 Search in Rotated Sorted Array II 【优化版,从right开始】

之前的代码: public class Solution { public boolean search(int[] nums, int target) { int left=0; int right=nums.length-1; while(left<=right){ // 通过夹逼法缩小范围,类似二分,必须有lef

2017-03-18 08:09:04 177

原创 153 Find Minimum in Rotated Sorted Array

接着上面的两道题,仍然在这个rotated sorted array中变换出题。这道题是要找出最小的那个数(当然也可以是最小数的index) 之前写的代码如下,还包括了好长的思考比较,唉,一开始我还真是非常认真,非常耐心去抠细节的: public class Solution { public int findMin(int[] nums) { // 1.24 做fir

2017-03-18 07:50:05 137

原创 33 Search in Rotated Sorted Array

接着上一道题:Search in rotated sorted array, containing duplicates,含有重复元素 这一道题是简化版:Search in rotated sorted array, containing no duplicates,不含重复元素 之前用了递归的解法,思路是一样的,有点意思,代码如下:【不同时候对同一道的写法可以完全不一样,

2017-03-18 06:58:31 171

原创 81 Search in Rotated Sorted Array II

这题是在之前做过的一道题的follow up,之前的题说明了sort array中没有duplicate,但是这题里强调说有duplicate,那么就是要针对这以特点进行特殊处理。 基本逻辑还是一样的 通过left 和 right 夹逼来缩小搜索范围【使用while loop,内部条件是left<=right,是可以相等的,因为left和right都可能是target,但是只有允许left==

2017-03-18 05:17:59 191

原创 92 Reverse Linked List II

逆转部分LinkList,和逆转整个LinkList的题目是一样的,沿用之前的思路就可以,新建一个dummyNode,把要逆转的部分通过头插法连接起来。 这道题稍微有点麻烦,就是分步骤: 1,找到逆转部分的之前一个node,作为第一个attach point 2,确定逆转部分的最后一个node,作为第二个attach point 3,完成扭转之后,attach两次既可! 一个技巧,因为m

2017-03-17 01:39:41 226

原创 146 LRU Cache

这是一道hard题,因为Uber群里说面试过,所以做一下题目意思的原型是LRU cache,就是在一定capacity的cache下需要有效的利用空间,把滞留的时间最长没有使用的内存给替换掉,要求取地址和替换替地址的复杂度都是O(1),因此需要HashMap和DoubleLinkedList来实现。 题目中的key 和 value代表了内存地址和存储的数据,这里只用int来表示只是为了简化,因为

2017-03-16 14:48:21 331

原创 535 Encode and Decode TinyURL

url 长短两个类型的转化,初一看题意并不明确,不知道是否要保留http://  但参考了别人的答案后发现,其实并不需要,就是相当于一个长字符串和短字符串 之间建立一一对应的关系,其实就相当于字符和index之间的对应关系,稍微扩展一下就是这道题的解法的。 用动态array,ArrayList 就可以解决问题。代码如下,这里把index当作shortUrl比用size当作shortUrl更方便

2017-03-16 11:03:20 2024

原创 359 Logger Rate Limiter

一道简单的记录login日志的题,因为在论坛上看到这道题是Uber面试中出现的。 逻辑很简单,用户名和时间进行配对,只有在一种情况下才会判断不可以打印:之前该用户已经存在,且,是在之前10秒内login的。。。因此用HashMap来记录最新的用户登录信息即可 public class Logger{ HashMap record; /** Initi

2017-03-16 02:26:56 493

原创 重启Leetcode模式,在无尽的Google Team Match中重生

上次写博客应该是3周之前,为什么记得这么清楚,因为1周等Google通知,2周等Google team match,这中间我的心情比较混乱也没动力做题。然而现在仍然没有host对我感兴趣,不知道最终Google offer能不能来。我自己也开始胡思乱想焦虑,其实早就该接着做题来摆脱负面情绪了。 等待面试通知,得知通过面试,联系校友朋友找host,起起落落的情节让我情绪也忽高忽低,同时也明白了自己

2017-03-15 14:41:14 4178

空空如也

空空如也

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

TA关注的人

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