/algorithms-note

Notes for algorithms

Primary LanguagePython

Algorithms-Note

Sort

排序算法 平均时间复杂度 最好 最坏 空间复杂度 排序方式 稳定性
冒泡排序 O(n²) O(n) O(n²) O(1) in-place 稳定
选择排序 O(n²) O(n²) O(n²) O(1) in-place 不稳定
插入排序 O(n²) O(n²) O(n²) O(1) in-place 稳定
希尔排序 $O(n^{1.3})$ O(n) O(n²) O(1) in-place 不稳定
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) out-place 稳定
快速排序 O(nlogn) O(nlogn) O(n²) O(logn) in-place 不稳定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) in-place 不稳定
计数排序 O(n+k) O(n+k) O(n+k) O(k) out-place 稳定
桶排序 O(n+k) O(n+k) O(n²) O(n+k) out-place 稳定
基数排序 O(d(n+r)) O(d(n+r)) O(d(n+r)) O(n+rd) out-place 稳定

Click here for details.

Bit Manipulation

# Title Solution Time Space Difficulty Tag Note
136 Single Number Python O(n) O(1) Easy
137 Single Number II O(n) O(1) Medium
190 Reverse Bits Python O(1) O(1) Easy
191 Number of 1 Bits Python O(1) O(1) Easy
201 Bitwise AND of Numbers Range O(1) O(1) Medium
231 Power of Two Python O(1) O(1) Easy LintCode
260 Single Number III O(n) O(1) Medium
268 Missing Number O(n) O(1) Medium LintCode
318 Maximum Product of Word Lengths O(n) ~ O(n^2) O(n) Medium Bit Manipulation, Counting Sort, Pruning
342 Power of Four Python O(1) O(1) Easy
371 Sum of Two Integers Python O(1) O(1) Easy LintCode
389 Find the Difference Python O(n) O(1) Easy
393 UTF-8 Validation O(n) O(1) Medium
401 Binary Watch Python O(1) O(1) Easy
411 Minimum Unique Word Abbreviation O(2^n) O(n) Hard 📖
421 Maximum XOR of Two Numbers in an Array O(n) O(1) Medium
461 Hamming Distance Python O(1) O(1) Easy
462 Minimum Moves to Equal Array Elements II O(n) on average O(1) Medium
477 Total Hamming Distance O(n) O(1) Medium
645 Set Mismatch Python O(n) O(1) Easy
693 Binary Number with Alternating Bits Python O(log(n)) O(1) Easy
762 Prime Number of Set Bits in Binary Representation Python O(1) O(1) Easy
868 Binary Gap Python O(1) O(1) Easy
898 Bitwise ORs of Subarrays O(n) O(1) Medium

Array

# Title Solution Time Space Difficulty Tag Note
015 3 Sum C++ O(n^2) O(1) Medium Two Pointers
016 3 Sum Closest C++ O(n^2) O(1) Medium Two Pointers
018 4 Sum C++ O(n^3) O(1) Medium Two Pointers

Linked List

# Title Solution Time Space Difficulty Tag Note
002 Add Two Numbers O(n) O(1) Medium
021 Merge Two Sorted Lists Python O(n) O(1) Easy
023 Merge k Sorted Lists O(nlogk) O(1) Hard Heap, Divide and Conquer
024 Swap Nodes in Pairs Python O(n) O(1) Easy
025 Reverse Nodes in k-Group O(n) O(1) Hard
061 Rotate List Python O(n) O(1) Medium
082 Remove Duplicates from Sorted List II Python O(n) O(1) Medium
083 Remove Duplicates from Sorted List Python O(n) O(1) Easy
092 Reverse Linked List II Python O(n) O(1) Medium
138 Copy List with Random Pointer O(n) O(1) Hard
160 Intersection of Two Linked Lists Python O(m +n) O(1) Easy
203 Remove Linked List Elements Python O(n) O(1) Easy
206 Reverse Linked List Python O(n) O(1) Easy
234 Palindrome Linked List Python O(n) O(1) Easy
237 Delete Node in a Linked List Python O(1) O(1) Easy LintCode
328 Odd Even Linked List O(n) O(1) Medium
369 Plus One Linked List O(n) O(1) Medium 📖 Two Pointers
445 Add Two Numbers II O(m +n) O(m + n) Medium
725 Split Linked List in Parts O(n + k) O(1) Medium
817 Linked List Components O(m +n) O(m) Medium

Hash Table

# Title Solution Time Space Difficulty Tag Note
001 Two Sum C++ O(n) O(n) Easy

Dynamic Programming

# Title Solution Time Space Difficulty Tag Note
010 Regular Expression Matching O(m * n) O(n) Hard
053 Maximum Subarray Python O(n) O(1) Easy
062 Unique Paths Python O(m * n) O(m) Medium
063 Unique Paths II Python O(m * n) O(m) Medium
064 Minimum Path Sum Python O(m * n) O(m) Medium
070 Climbing Stairs Python O(n) O(1) Easy
072 Edit Distance O(m * n) O(m+n) Hard
087 Scramble String O(n^4) O(n^3) Hard
091 Decode Ways Python O(n) O(1) Medium
096 Unique Binary Search Trees Python O(n) O(1) Medium Math
097 Interleaving String O(m * n) O(m+n) Hard
115 Distinct Subsequences O(n^2) O(n) Hard
120 Triangle O(m * n) O(n) Medium
123 Best Time to Buy and Sell Stock III O(n) O(1) Hard
132 Palindrome Partitioning II O(n^2) O(n^2) Hard
139 Word Break O(n * l^2) O(n) Medium
152 Maximum Product Subarray O(n) O(1) Medium
174 Dungeon Game O(m * n) O(m+n) Hard
188 Best Time to Buy and Sell Stock IV O(k * n) O(k) Hard
198 House Robber Python O(n) O(1) Easy
213 House Robber II Python O(n) O(1) Medium
221 Maximal Square O(n^2) O(n) Medium EPI
256 Paint House O(n) O(1) Medium 📖
265 Paint House II O(n * k) O(k) Hard 📖
276 Paint Fence O(n) O(1) Easy 📖
279 Perfect Squares O(n * sqrt(n)) O(n) Medium Hash
303 Range Sum Query - Immutable Python ctor: O(n), lookup: O(1) O(n) Easy
304 Range Sum Query 2D - Immutable Python ctor: O(m*n), lookup: O(1) O(m*n) Medium
309 Best Time to Buy and Sell Stock with Cooldown O(n) O(1) Medium
312 Burst Balloons O(n^3) O(n^2) Hard
322 Coin Change O(n * k) O(k) Medium
351 Android Unlock Patterns O(9^2 * 2^9) O(9 * 2^9) Medium 📖 Backtracking
357 Count Numbers with Unique Digits O(n) O(1) Medium Backtracking, Math
361 Bomb Enemy O(m * n) O(m*n) Medium 📖
368 Largest Divisible Subset O(n^2) O(n) Medium
375 Guess Number Higher or Lower II O(n^2) O(n^2) Medium
377 Combination Sum IV O(nlogn + n * t) O(t) Medium
403 Frog Jump O(n) O(n) ~ O(n^2) Hard
416 Partition Equal Subset Sum O(n * s) O(s) Medium
418 Sentence Screen Fitting O(r + n * c) O(n) Medium 📖
446 Arithmetic Slices II - Subsequence O(n^2) O(n * d) Hard
465 Optimal Account Balancing O(n * 2^n) O(n * 2^n) Hard 📖
466 Count The Repetitions O(s1 * min(s2, n1)) O(s2) Hard
467 Unique Substrings in Wraparound String O(n) O(1) Medium
471 Encode String with Shortest Length O(n^3) on average O(n^2) Medium 📖
472 Concatenated Words O(n * l^2) O(n * l) Medium
474 Ones and Zeroes O(s * m * n) O(m*n) Medium
486 Predict the Winner O(n^2) O(n) Medium
514 Freedom Trail O(k) ~ O(k * r^2) O(r) Hard
516 Longest Palindromic Subsequence O(n^2) O(n) Medium
546 Remove Boxes O(n^3) ~ O(n^4) O(n^3) Hard
552 Student Attendance Record II O(n) O(1) Hard
562 Longest Line of Consecutive One in Matrix O(m * n) O(n) Medium 📖
568 Maximum Vacation Days O(n^2 * k) O(k) Hard 📖
576 Out of Boundary Paths O(N * m * n) O(m*n) Medium
583 Delete Operation for Two Strings O(m * n) O(n) Medium
600 Non-negative Integers without Consecutive Ones O(1) O(1) Hard
629 K Inverse Pairs Array O(n * k) O(k) Hard
639 Decode Ways II O(n) O(1) Hard
650 2 Keys Keyboard O(sqrt(n)) O(1) Medium
656 Coin Path O(n * B) O(n) Hard 📖
664 Strange Printer O(n^3) O(n^2) Hard
673 Number of Longest Increasing Subsequence O(n^2) O(n) Medium
688 Knight Probability in Chessboard O(k * n^2) O(n^2) Medium
689 Maximum Sum of 3 Non-Overlapping Subarrays O(n) O(n) Hard
691 Stickers to Spell Word O(T * S^T) O(T * S^T) Hard Backtracking, Memoization
712 Minimum ASCII Delete Sum for Two Strings O(m * n) O(n) Medium
714 Best Time to Buy and Sell Stock with Transaction Fee O(n) O(1) Medium
727 Minimum Window Subsequence O(s * t) O(s) Hard 📖
730 Count Different Palindromic Subsequences O(n^2) O(n) Hard
740 Delete and Earn O(n) O(1) Medium
741 Cherry Pickup O(n^3) O(n^2) Hard
746 Min Cost Climbing Stairs Python O(n) O(1) Easy
750 Number Of Corner Rectangles O(n * m^2) O(n * m) Medium
764 Largest Plus Sign O(n^2) O(n^2) Medium
788 Rotated Digits Python O(logn) O(logn) Easy Memoization
790 Domino and Tromino Tiling O(logn) O(logn) Medium Matrix Exponentiation
799 Champagne Tower O(n^2) O(n) Medium
801 Minimum Swaps To Make Sequences Increasing O(n) O(1) Medium
805 Split Array With Same Average O(n^4) O(n^3) Hard
808 Soup Servings O(1) O(1) Medium Memoization
813 Largest Sum of Averages O(k * n^2) O(n) Medium
818 Race Car O(nlogn) O(n) Hard
823 Binary Trees With Factors O(n^2) O(n) Medium
837 New 21 Game O(n) O(n) Medium
838 Push Dominoes O(n) O(n) Medium
847 Shortest Path Visiting All Nodes O(n * 2^n) O(n * 2^n) Hard BFS
877 Stone Game O(n^2) O(n) Medium variant of Predict the Winner
879 Profitable Schemes O(n * p * g) O(p * g)