Algorithm Approaches


Array - TWO POINTERS
1.  Two sides to middle
2 sum questions (2sum, 3sum, 4sum, trapping water...)
partition (partition array...)

2. Forwarding
Window (minimum window substring)
Fast and slow pointer (Linked list cycle)


3. Two arrays, two pointers
The smallest difference

Kadane’s Algorithm + change 0 to -1
Find number of bits to be flipped to get maximum 1’s in array

Corner case: loop, cycle
LeetCode --- 202. Happy Number
use hash map to keep all the previous calculated number, if it is loop, exist with false

http://www.1point3acres.com/bbs/thread-50621-1-1.html
(2)面试题。刷题要刷多狠?我觉得因人而异。你对算法熟悉度如何?敏锐度如何?融会贯通度如何?这很关键。熟悉度,就是知道该用什么方法做了,能顺利地写出来。这很基本,如果这个不熟,那不行,刷题起的最大的作用就在这方面。敏锐度,就是找到题目怎么做的正确方法,这个类似解题的“灵感”,但学习科学与工程出身的诸位想必都知道,“灵感”不是乱蹿出来的,是建立在真正的深刻理解的基础上。这个刷题有一些帮助,但我觉得不大。融会贯通度,就是“妥妥的看透题目的本质”,并找到最优的方法。融会贯通和敏锐是很相关的两项属性,但侧重不同:敏锐度对解难题很重要,快速的定位,找突破口;融会贯通保证你能做出绝大多数的正常题,因为你看透了题目的数学本质,你知道了问题的结构,自然能做出相应的解答,这是“重剑无锋,大巧不工”。“融会贯通度”能靠刷题提高吗?我觉得不能,只能说刷题给了你练习“融会贯通”的机会,或者说给了你思考的机会。而要提高融会贯通度,刷题本身并不能帮上忙,重要的是做了题之后的思考。

好了,总结一下:刷题巩固算法熟悉度,打好基础;刷题的同时提高理解,增加敏锐度;刷完题,思考,提高融会贯通度。所以说,基础好的人,不用做很多的题。我因为算法学得还不错,又做过助教,基础没丢,在所以策略就是,做一些有限的题。我选了Cracking Coding Interview。我通看了全书,然后细细的做每一道题。第一次电面之前,时间太紧,无法亲手写完每一道,我就挑选了一部分手写,其他的在脑子里想了一遍。第二次电面前,又完整地做完一遍。onsite之前,第三次完整地做完了一遍。

我觉得我不能算“刷”题了,做得还是比较精的。目的:1、找回熟悉度,适量即可。2、经典问题,有一定的复现可能性,那如果遇到了,善莫大焉(但是马后炮一句,我做的所有题,最后没有一道复现的……)。我时间有限,选了这个少做精做的方案,但并不意味着如果我时间充裕就会去疯狂刷题。我会适当增加做题范围,但不会大量增加。因为,我认为,陷入太疯狂的刷子状态,会不知不觉地忘记思考,进入一种无脑模式(当然,已经非常融会贯通的人例外,他们不怕陷入无脑,但他们其实已经不需要刷题了不是吗?)。我为什么这么说?因为我想起了高中搞数学竞赛时,我们就是在一种相对平静的状态下进行,每天要做一些题,但不会像备考高考的同学那样狂刷试卷。后来数学竞赛结束后,回到准备高考的同学中间,发现思路比他们清晰不止一个档次(不仅数学,而是任何学科),而他们双目之间似乎有种木讷。然后跟着他们刷了一阵试卷,感到思路又快和他们差不多了,我赶紧停止了这种做法,再不癫狂刷试卷了。

Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts