一共五十六题,每题都写个思路,争取两小时搞定。
- Divide Two Integers: 二分法的思想
- Spiral Matrix:旋转的时候要注意边界越界情况
- Sort Colors: 彩虹排序
- Remove Duplicates from Sorted List II:不知道为何要记录这题
- Convert Sorted List to Binary Search Tree:用divide and conquer来做
- Flatten Binary Tree to Linked List:递归的方法就是先左右然后再合并,非递归的方法是preorder traversal的方法
- Binary Tree Upside Down: 递归的方法比较容易些,非递归的话就要用stack来模拟了
- Binary Search Tree Iterator:在hashnext的时候一直loop到最左边,然后调用next的时候
- Bitwise AND of Numbers Range:当m和n不等的时候就移位,并且记录移位的位数,直到相等的时候再朝回移位
- Majority Element II:设置两个candidate,然后设置两个count,用vote的方法来做就可以了
- Factor Combinations:backtracking的题目,不过在进入下一层循环的时候改变的量有两个n和cur
- Verify Preorder Sequence in Binary Search Tree:做法是把preorder的变成inorder,利用一个stack,观察一下preorder的大小顺序就可以了
- Peeking Iterator:首先要记录两个值,cur和prev,hasnext和peek都是操作cur,当获取next的值的时候,先把next值赋值给prev
- Inorder Successor in BST:用递归方法很好做
300. Longest Increasing Subsequence:难点在于follow up的log n 解法 - Best Time to Buy and Sell Stock with Cooldown:主要是要找buy和sell之间的关系
- Generalized Abbreviation:这道题比较麻烦,一直不太会写,现在再写一遍,等到复习Google tag的时候再复习一遍
- Wiggle Sort II:这题主要要把大的放一边把小的放一边中间值放中间,然后再进行排序就好了
- Reconstruct Itinerary:沿着一条路径一直朝下访问,直到无法访问,无法访问时候就从stack pop出来放到res里去
- Water and Jug Problem:这题是一道数学题
- Sum of Two Integers: 利用and和xor的操作
- Super Pow:数学题
- Combination Sum IV:背包问题
- Kth Smallest Element in a Sorted Matrix:二分法,判定条件为数数
- Insert Delete GetRandom O(1):利用一个array和一个hash,每次和array的最后一个值进行交换并且更新hash值
- Mini Parser:每次遇到一个【就加入一个nestedinteger
- Lexicographical Numbers:这道题有点看记忆力,大概思路是有的,不知道能不能写出bug free来
- Elimination Game:这道题连一个tag都没有,其实就是记录一个开头值
- Convert a Number to Hexadecimal:进制的转换
- Sentence Screen Fitting:这题有点坑,不太会做
- Maximum XOR of Two Numbers in an Array: 从最高位开始,每次res移一位的时候,都测试一下res | 1 是不是可能的答案
- Find Right Interval:二分法
- Ternary Expression Parser:从后往前做用stack依次做
- Sequence Reconstruction:拓扑排序的问题
- Minimum Moves to Equal Array Elements:数学题
- 132 Pattern:用stack维护一个start递减的range
- Can I Win:博弈类问题
- Unique Substrings in Wraparound String:以每一个字母ending的最大长度
- Ones and Zeroes:背包类问题
- Target Sum:又是一道背包类问题
- The Maze II:用heap维护一系列访问过的点,按照距离排序,先访问heap里最小的点,并且试着更新visited里的长度
- Longest Palindromic Subsequence:dp问题,对角线型dp
- Continuous Subarray Sum:要形成k的倍数,也就是要在dict里重复prefixsum % k
- Lonely Pixel II: 好晦涩的题目
- Split Array with Equal Sum:i,j,k固定一下j
- Optimal Division:数学题,或者是记忆化搜索
- Split Concatenated Strings:非Google题,不做了
- Add Bold Tag in String:遇到两组字符串的情况,某一组特别大,那么就考虑loop另一组
- Task Scheduler:用heap来依次做, 每次都把heap里的要用的元素pop出来放到一个temp里,然后再放回到heap里
- Exclusive Time of Functions:只要记录当前的任务id和prev的时间,剩下的就一点一点来判断
- Shopping Offers:记忆化搜索,先记录without special的,然后再试着如果加入special的各种情况
- 4 Keys Keyboard:寻求前面三个值的情况,也就是说如果用了j step到dp[j],那么剩余i-j步,然后C-A,C,V,V,V,可以获得i-j-2个copy,然后加上本身的copy,也就是i-j-1个copy
- Split Array into Consecutive Subsequences:有点greedy的方法
- Beautiful Arrangement II:感觉更像是一道数学题
- Bulb Switcher II:又是一道数学题。。。
- Partition to K Equal Sum Subsets:backtracking的题目,一个一个数找