Skip to content

TimLin1024/CodeInterview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CodeInterview

一、维护该仓库的初衷

Mac上著名软件HomeBrew的作者在2015年面试Google的时候被问到了一道翻转二叉树的题目,没做出来,因此最后被拒……于是他在个人推特上抱怨到:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

数据结构与算法是基本功。以前零零散散地刷过一些算法题。但日常开发中没怎么用到,一段时间过后又不熟悉了。建立这个仓库维护自己做过的算法题,方便回顾的同时,希望能够给有需要的同学提供一些参考。

二、该仓库中主要包括以下内容:

  • 剑指 offer 部分题解
  • leetCode 部分题解
  • 程序员代码面试指南
  • 八大排序
  • 大数据量和空间限制相关题目
  • 逻辑题

三、LeetCode 题目大致分类

Math

Problem Solution Time Space Difficulty Tag Note
002.add-two-numbers cpp, python O(N) O(1) Medium/S--
007.reverse-integer cpp, python O(L) O(1) Easy/S--
043.multiply-strings cpp, python O(M*N) O(M+N) Medium/S++
048.rotate-image cpp, python O(M * N) O(1) Medium/S++
050.powx-n cpp, python O(logN) O(1) Medium/S++
067.add-binary cpp, python O(N) O(1) Easy
311.sparse-matrix-multiplication cpp, python O(N^3) O(N^2) Medium/S--
415.add-strings cpp, python O(N) O(1) Easy
836.rectangle-overlap cpp, python O(1) O(1) Easy
Problem Solution Time Difficulty Tag Note
012.integer-to-roman cpp, python O(N) Medium N = length of results
013.roman-to-integer cpp, python O(N) Easy
136.single-number cpp O(N) Easy bits
202.happy-number cpp, python O(N) Easy

Array and String

Problem Solution Time Difficulty Tag Note
53.maximum-subarray python O(N) Easy
54.spiral-matrix cpp O(N) Medium
66.plus-one cpp O(N) Easy
118.pascals-triangle cpp O(N^2) Easy
350.intersection-of-two-arrays-ii python O(N * logN) Easy
485.max-consecutive-ones cpp O(N) Easy
498.diagonal-traverse cpp O(M * N) Medium
560.subarray-sum-equals-k python O(N) Medium
561.array-partition-i cpp O(N * logN) Easy
724.find-pivot-index cpp O(N) Easy
747.largest-number-at-least-twice-of-others cpp O(N) Easy
796.rotate-string cpp, python O(N^2) Easy string TODO: Rabin-Karp Algorithm, KMP algorithm
859.buddy-strings cpp O(N) Easy string
Problem Solution Time Space Difficulty Tag Note
042.trapping-rain-water cpp, python O(N) O(N) Hard Scan Twice
056.merge-intervals cpp, python O(N * logN) O(1) Medium Sort N = number of intervals
057.insert-interval cpp, python O(N) O(1) Hard Sort N = number of intervals
157.read-n-characters-given-read4 cpp, python O(N) O(1) Easy String
161.one-edit-distance cpp, python O(N) O(1) Medium String
163.missing-ranges cpp, python O(N) O(1) Medium Array Mind int overflow
215.kth-largest-element-in-an-array cpp, python O(N) O(1) Medium/S-- quick-select best = O(N), worst = O(N^2)
240.search-a-2d-matrix-ii cpp, python O(N + M) O(1) Medium
271.encode-and-decode-strings cpp, python O(N) O(1) Easy String N = count of chars
277.find-the-celebrity cpp, python O(N) O(1) Medium
346.moving-average-from-data-stream cpp, python O(N) O(K) Easy Queue(Circular array)
388.longest-absolute-file-path cpp, python O(N) O(N) Medium String
408.valid-word-abbreviation cpp, python O(N) O(1) Easy
527.word-abbreviation cpp, python O(N * L) O(N) Hard L = avg word length
674.longest-continuous-increasing-subsequence cpp, python O(N) O(1) Easy

Two Pointers

Problem Solution Time Space Difficulty Tag Note
003.longest-substring-without-repeating-characters cpp, python O(N) O(N) Medium
026.remove-duplicates-from-sorted-array cpp, python O(N) O(1) Easy
027.remove-element cpp, python O(N) O(1) Easy
028.implement-strstr cpp, python O(M + N) O(1) Easy Pattern Searching KMP
042.trapping-rain-water cpp, python O(N) O(1) Hard Two Pointers
076.minimum-window-substring cpp, python O(N) O(N) Hard
088.merge-sorted-array cpp, python O(N + M) O(1) Easy
125.valid-palindrome cpp, python O(N) O(1) Easy
141.linked-list-cycle cpp, python O(N) O(1) Easy
159.longest-substring-with-at-most-two-distinct-characters cpp, python O(N) O(N) Hard
167.two-sum-ii-input-array-is-sorted cpp, python O(N) O(1) Easy
209.minimum-size-subarray-sum cpp, python O(N) O(1) Medium
234.palindrome-linked-list cpp, python O(N) O(1) Easy maybe Harder
283.move-zeroes cpp, python O(N) O(1) Easy
340.longest-substring-with-at-most-k-distinct-characters cpp, python O(N) O(N) Hard
344.reverse-string cpp, python O(N) O(1) Easy
345.reverse-vowels-of-a-string cpp, python O(N) O(1) Easy
349.intersection-of-two-arrays cpp, python O(K * logK), k = max(M, N) O(1) Easy hash, binary-search
350.intersection-of-two-arrays-ii cpp, python O(K * logK), k = max(M, N) O(1) Easy hash, binary-search
532.k-diff-pairs-in-an-array cpp, python O(N * logN) O(1) Easy Hash
844.backspace-string-compare cpp, python O(N) O(1) Easy stack

Two Pointers(legacy)

Problem Solution Time Difficulty Tag Note
15.3sum cpp, python O(N^2) Medium
16.3sum-closest cpp, python O(N^2) Medium
18.4sum cpp, python O(N^3) Medium
19.remove-nth-node-from-end-of-list cpp, python O(N) Medium
75.sort-colors cpp python O(N) Medium counting-sort
142.linked-list-cycle-ii python O(N) Medium linked-list
160.intersection-of-two-linked-lists python O(N + M) Easy linked-list

Linked List

Problem Solution Time Difficulty Tag Note
21.merge-two-sorted-lists cpp, python O(N) Easy
25.reverse-nodes-in-k-group python O(N) Hard
61.rotate-list python O(N) Medium
86.partition-list python O(N) Medium
92.reverse-linked-list-ii python O(N) Medium
138.copy-list-with-random-pointer python O(N) Medium
143.reorder-list python O(N) Medium
148.sort-list python O(N * logN) Medium
203.remove-linked-list-elements python O(N) Easy
206.reverse-linked-list python O(N) Easy
237.delete-node-in-a-linked-list python O(1) Easy
328.odd-even-linked-list python O(N) Medium

Binary Search

Problem Solution Time Space Difficulty Tag Note
029.divide-two-integers cpp, python O(logN) O(1) Medium/S++ Math
$033.search-in-rotated-sorted-array cpp, python O(logN) O(1) Medium/S++
034.find-first-and-last-position-of-element-in-sorted-array cpp, python O(LogN) O(1) Medium
069.sqrtx cpp, python O(logN) O(1) Easy
074.search-a-2d-matrix cpp,python O(logN) O(1) Medium N = row * col
081.search-in-rotated-sorted-array-ii cpp, python O(logN) ~ O(N) O(1) Medium/S++
153.find-minimum-in-rotated-sorted-array cpp, python O(logN) O(1) Medium
154.find-minimum-in-rotated-sorted-array-ii cpp, python O(logN) ~ O(N) O(1) Hard
162.find-peak-element cpp, python O(logN) O(1) Medium
278.first-bad-version cpp, python O(logN) O(1) Easy
302.smallest-rectangle-enclosing-black-pixels cpp, python O(MLogN + NLogM) O(1) Hard/SSS
374.guess-number-higher-or-lower cpp, python O(LogN) O(1) Easy
704.binary-search cpp, python O(logN) O(1) Easy
852.peak-index-in-a-mountain-array cpp, python O(logN) O(1) Easy Golden-section search

Divide and Conquer

Problem Solution Time Difficulty Tag Note
4.median-of-two-sorted-arrays cpp, python O(log(M + N)) Hard
98.validate-binary-search-tree cpp, python O(N) Medium TODO: inorder-traversal
104.maximum-depth-of-binary-tree cpp, python O(N) Easy
110.balanced-binary-tree cpp, python O(N) Easy
236.lowest-common-ancestor-of-a-binary-tree cpp, python O(N) Medium
Problem Solution Time Space Difficulty Tag Note
282.expression-add-operators cpp, python O(2 ^ N) O(N) Hard/SSS DFS N = length of input

Tree Traversal

Problem Solution Time Difficulty Tag Note
94.binary-tree-inorder-traversal cpp O(N) Medium
102.binary-tree-level-order-traversal cpp O(N) Medium
107.binary-tree-level-order-traversal-ii cpp O(N) Easy
144.binary-tree-preorder-traversal cpp O(N) Medium
Problem Solution Time Space Difficulty Tag Note
130.surrounded-regions cpp, python O(M * N) O(M & N) Medium BFS
156.binary-tree-upside-down cpp, python O(V) O(1) Medium
285.inorder-successor-in-bst cpp, python O(H) O(1) Medium BST H = height of the tree
286.walls-and-gates cpp, python O(M * N) O(M * N) Medium BFS
314.binary-tree-vertical-order-traversal cpp, python O(V) O(V) Medium
366.find-leaves-of-binary-tree cpp, python O(V) O(V) Medium
433.minimum-genetic-mutation cpp, python O(V + E) O(N) Medium
538.convert-bst-to-greater-tree cpp, python O(V) O(1) Easy

Graph Traversal

Problem Solution Time Difficulty Tag Note
127.word-ladder python O(N * L^2) Medium BFS
200.number-of-islands python O(M x N) Medium BFS/DFS union-find
207.course-schedule cpp O(V + E) Medium
210.course-schedule-ii cpp O(V + E) Medium topological-sort
444.sequence-reconstruction cpp, python O(V+E) Medium topological-sort

Backtracking

Problem Solution Time Difficulty Tag Note
39.combination-sum python ??? Medium DFS
40.combination-sum-ii python ??? Medium DFS
46.permutations python ??? Medium DFS
47.permutations-ii python ??? Medium DFS
51.n-queens python ??? Hard DFS
52.n-queens-ii python ??? Hard DFS
078.subsets cpp, python O(N * 2^N) Medium/S-- DFS bit-manipulation / iterative
090.subsets-ii cpp, python O(N * 2^N) Medium/S++ DFS
126.word-ladder-ii python O((V+E) * L^2) Hard BFS + DFS
131.palindrome-partitioning python ??? Medium DFS
Problem Solution Time Space Difficulty Tag Note
17.letter-combinations-of-a-phone-number cpp, python O(2 ^ N) O(N) Medium Time in [3 ^ N, 4 ^ N]
079.word-search cpp, python O(M * N * L * L) O(M * N) Medium DFS L = length of words

Hash Table

Problem Solution Time Difficulty Tag Note
1.two-sum cpp, python O(N) Easy
36.valid-sudoku cpp O(N ^ 2) Medium array-indexes
49.group-anagrams cpp O(N * k * Logk) Medium
170.two-sum-iii-data-structure-design cpp, python O(N) Easy
202.happy-number cpp, python O(N) Easy
217.contains-duplicate cpp O(N) Easy
219.contains-duplicate-ii cpp O(N) Easy
249.group-shifted-strings cpp O(N * K) Medium
347.top-k-frequent-elements cpp O(N * LogN) Medium TODO: quick-sort, bucket-sort
349.intersection-of-two-arrays cpp O(M + N) Easy
350.intersection-of-two-arrays-ii cpp O(M * N) Easy
359.logger-rate-limiter cpp O(1) Easy amortized
380.insert-delete-getrandom-o1 cpp O(1) Medium
454.4sum-ii cpp O(N ^ 2) Medium
599.minimum-index-sum-of-two-lists cpp O(M + N) Easy
652.find-duplicate-subtrees cpp O(N) Medium
771.jewels-and-stones cpp O(M + N) Easy
Problem Solution Time Space Difficulty Tag Note
128.longest-consecutive-sequence cpp, python O(N) O(N) Hard Union-find
205.isomorphic-strings cpp, python O(N) O(N) Easy
246.strobogrammatic-number cpp, python O(N) O(1) Easy
288.unique-word-abbreviation cpp, python O(1) O(N) Medium
387.first-unique-character-in-a-string cpp, python O(N) O(N) Easy
438.find-all-anagrams-in-a-string cpp, python O(N) O(N) Easy

Heap

Problem Solution Time Space Difficulty Tag Note
23.merge-k-sorted-lists cpp O(N * LogK) - Hard TODO: merge-sort, bottom-up
378.kth-smallest-element-in-a-sorted-matrix cpp, python O((K + M) * LogM) O(M) Medium TODO: binary-search, O(N) solution
407.trapping-rain-water-ii cpp, python O(M * N * Log(M + N)) O(M + N) Hard

Stack

Problem Solution Time Space Difficulty Tag Note
20.valid-parentheses cpp, python O(N) O(N) Easy

Dynamic Programming

PS: Often space could be optimized using circular array, it not that hard, just mod every new and old indexes against the size(For 2D: row, col, diagonal)

Problem Solution Time Difficulty Tag Note
70.climbing-stairs cpp, python O(N) Easy Coordinates
120.triangle cpp, python O(N^2) Medium Coordinates
368.largest-divisible-subset cpp O(N^2) Medium
403.frog-jump cpp O(N^2) Hard
Problem Solution Time Space Difficulty Note Grade
010.regular-expression-matching cpp, python O(MN) O(MN) Hard/S++ Sequence
044.wildcard-matching cpp, python O(MN) O(MN) Hard Sequence
062.unique-paths cpp, python O(M * N) O(M * N) Medium Coordinates
063.unique-paths-ii cpp, python O(M * N) O(M * N) Medium Coordinates
064.minimum-path-sum cpp, python O(M * N) O(M * N) Medium Coordinates
072.edit-distance cpp, python O(MN) O(MN) Hard/S-- Sequence
087.scramble-string cpp, python O(N^4) O(N^3) Hard/SSS Range
091.decode-ways cpp, python O(N) O(N) Medium/S++ Partition
097.interleaving-string cpp, python O(MN) O(MN) Hard/S-- Sequence
115.distinct-subsequences cpp, python O(MN) O(MN) Hard/S-- Sequence
132.palindrome-partitioning-ii cpp, python O(N^2) O(N^2) Hard Partition
188.best-time-to-buy-and-sell-stock-iv cpp, python O(N*K) O(N * K) Hard/SSS
198.house-robber cpp, python O(N) O(N) Easy Sequence
121.best-time-to-buy-and-sell-stock cpp, python O(N) O(1) Easy Coordinates
123.best-time-to-buy-and-sell-stock-iii cpp, python O(N) O(N) Hard/SSS
213.house-robber-ii cpp, python O(N) O(N) Medium/S-- Sequence
256.paint-house cpp, python O(N) O(N) Easy/S-- Sequence
265.paint-house-ii cpp, python O(M * N) O(M * N) Hard Sequence
279.perfect-squares cpp, python O(N ^ 1.5) O(N) Medium Partition
300.longest-increasing-subsequence cpp, python O(N*logN) O(N) Medium/SSS Binary-search / DP Perfect
312.burst-balloons cpp, python O(N^3) O(N^2) Hard/S-- Range
322.coin-change cpp, python O(L*N) O(N) Medium N = amount, L = len(coins)
338.counting-bits cpp, python O(N) O(1) Medium/S-- Bit-manipulation
354.russian-doll-envelopes cpp, python O(N*logN) O(N) Hard/S-- Coordinates
$361.bomb-enemy cpp, python O(M * N) O(M * N) Medium/S++ Coordinates
377.combination-sum-iv cpp, python O(M*N) O(N) Medium backpack-vi(Lintcode)
474.ones-and-zeroes cpp, python O(LMN) O(LMN) Medium Sequence
516.longest-palindromic-subsequence cpp, python O(N^2) O(N^2) Medium

Greedy

Problem Solution Time Space Difficulty Tag Note
45.jump-game-ii cpp, python O(N) O(1) Hard
055.jump-game cpp, python O(N) O(1) Medium dynamic-programming
122.best-time-to-buy-and-sell-stock-ii cpp, python O(N) O(1) Easy
$406.queue-reconstruction-by-height cpp, python O(N^2) O(1) Medium/S++ Sort Multiple Keys

Union Find

Problem Solution Time Space Difficulty Tag Note
261.graph-valid-tree cpp, python O(N) O(N) Medium BFS/DFS
305.number-of-islands-ii cpp, python O(N) O(M * N) Hard N = len(positions)
721.accounts-merge cpp, python O(M * N) O(M * N) Medium

Trie

Problem Solution Time Space Difficulty Tag Note
208.implement-trie-prefix-tree cpp, python O(L) O(N * L) Medium - L = len(word), N = number of words
211.add-and-search-word-data-structure-design cpp, python add = O(L), find >= O(L) O(N * L) Medium/S-- DFS L = len(word), N = count(words)
212.word-search-ii cpp, python O(M * N * L * L) MAX(O(M * N), O(K * L)) Hard DFS K = number of words, L = avg length of words
425.word-squares cpp, python O(2^N) O(NL) Hard/SSS DFS Pruning
677.map-sum-pairs cpp, python O(L), O(KL) O(N * L) Medium L = length of input, k = number of items found

Other

Problem Solution Difficulty Tag Note
175.combine-two-tables sql Easy SQL

四、Lintcode

Problem Solution Time Space Difficulty Tag Note
077.longest-common-subsequence cpp, python O(M*N) O(M*N) Medium dynamic-programming
081.find-median-from-data-stream cpp, python O(N * LogN) O(N) Hard Heap
089.k-sum cpp, python O(NKT) O(NKT) Hard dynamic-programming
91.minimum-adjustment-cost cpp, python O((100^2)N) O(100N) Medium dynamic-programming
092.backpack cpp, python O(M*N) O(M) Medium dynamic-programming
125.backpack-ii cpp, python O(M*N) O(M) Medium/S++ dynamic-programming
183.wood-cut cpp, python O(N * LogN) O(1) Medium/S-- binary-search
394.coins-in-a-line cpp, python O(N) O(N) Medium dynamic-programming
396.coins-in-a-line-iii cpp, python O(N^2) O(N^2) Hard/SSS dynamic-programming
437.copy-books cpp, python O(K * N^2) / O(N * LogA) O(NK) Hard/SSS dynamic-programming / binary-search
440.backpack-iii cpp, python O(M * N) O(M) Hard/SSS dynamic-programming
447.search-in-a-big-sorted-array cpp, python O(LogK) O(1) binary-search Medium/S++
465.kth-smallest-sum-in-two-sorted-arrays cpp, python O((K + N) * LogN) O(N) Hard heap N = B.size()
543.kth-largest-in-n-arrays cpp, python O(M * N * LogK) O(K) Easy heap
526.load-balancer cpp, python O(1) O(N) Medium Hash + Array
563.backpack-v cpp, python O(M*N) O(M) Medium dynamic-programming
589.connecting-graph cpp, python O(1) O(N) Medium union-find
590.connecting-graph-ii cpp, python O(1) O(N) Medium union-find
591.connecting-graph-iii cpp, python O(1) O(N) Medium union-find
629.minimum-spanning-tree cpp, python O(N * logN) O(N) Hard union-find Prim, Kruskal
652.factorization cpp, python O(N) O(LogN) Medium/S++ N = input number

五、参考资料&致谢

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages