├── 1.算法框架_labuladong ├── 16.图 │ ├── Prim算法 │ │ ├── index.ts │ │ └── index.md │ ├── Kruskal最小生成树算法 │ │ └── Kruskal算法 │ │ │ ├── tempCodeRunnerFile.ts │ │ │ └── index.assets │ │ │ ├── image-20211110190005995.png │ │ │ └── image-20211110190557406.png │ ├── 二分图 │ │ ├── index.assets │ │ │ ├── image-20211109195657727.png │ │ │ └── image-20211109195758476.png │ │ └── 277.搜索名人.ts │ ├── 拓扑排序 环检测 │ │ └── index.assets │ │ │ ├── image-20211108200919765.png │ │ │ ├── image-20211108201515013.png │ │ │ └── image-20211108201526738.png │ └── 图-并查集Union Find算法 │ │ └── index.assets │ │ ├── image-20211109205259544.png │ │ ├── image-20211109205329402.png │ │ ├── image-20211109205448827.png │ │ ├── image-20211109205958477.png │ │ ├── image-20211109210254277.png │ │ └── image-20211109212508193.png ├── 18.未分类题目 │ ├── 877石头游戏.js │ ├── test.js │ ├── 83.删除排序链表中的重复元素.js │ ├── 292.Nim游戏.js │ └── 384. 打乱数组.js ├── New Topics_after 2021-08 │ ├── .gitkeep │ ├── 最大频率栈 │ │ └── test.ts │ ├── 待完成 │ │ ├── 58.最后一个单词的长度.py │ │ ├── 71.简化路径.py │ │ ├── 139. 单词拆分.py │ │ └── 1650. 二叉树的最近公共祖先 III.py │ ├── 链表 │ │ ├── 237. 删除链表中的节点.ts │ │ ├── 876. 链表的中间结点.ts │ │ └── 160. 相交链表.ts │ └── DFS 岛屿问题 │ │ └── test.ts ├── 19.高频面试题 │ ├── test.js │ ├── 20.有效的括号.js │ └── 845. 数组中的最长山脉.js ├── 3.二叉树集锦 │ ├── TreeNode.java │ ├── 104.二叉树最大深度.java │ └── 124求二叉树中的最大路径和.js ├── 3.二叉搜索树 │ ├── 第一期 │ │ ├── TreeNode.java │ │ ├── 230寻找第 K 小的元素.ts │ │ ├── 230寻找第 K 小的元素.java │ │ └── 530二叉搜索树转为累加树.java │ ├── 第二期 │ │ ├── 在 BST 中搜索一个数.java │ │ ├── 在 BST 中插入一个数.java │ │ └── 检测BST.java │ ├── index.md │ └── 第三期 │ │ ├── 96. 不同的二叉搜索树.java │ │ ├── 96. Unique Binary Search Trees.ts │ │ └── 96. Unique Binary Search Trees.go ├── 2.排序算法 合集 │ ├── 1.冒泡排序.js │ ├── 3.插入排序.js │ └── 排序算法分类.js ├── 1.必备算法框架 │ ├── 3_DFS与BFS使用范围.js │ └── 队列实现栈.ts ├── 6.双指针_快慢指针 │ └── 27.移动元素.js ├── 5.动态规划问题 合集 │ └── 452. 戳爆气球.js ├── 10.回文系列 │ └── 5.最长回文字符串.js └── 12.贪心算法 │ └── 55. 跳跃游戏.js ├── 8.Huahua-leetcode └── 1.Tree │ ├── test.java │ ├── 144. Binary Tree Preorder Traversal.java │ ├── 145. Binary Tree Postorder Traversal.java │ ├── 94. Binary Tree Inorder Traversal Problem.java │ └── 429. N-ary Tree Level Order Traversal.java ├── 6.Sorted Challenges 310p ├── 2.多指针 75 │ ├── 和差问题 │ │ ├── 15. 3Sum.ts │ │ ├── 18. 4Sum.ts │ │ ├── 重点 1. Two Sum.ts │ │ ├── 259. 3Sum Smaller.ts │ │ ├── 1099. Two Sum Less Than K.ts │ │ ├── Lint-382. Triangle Count.ts │ │ ├── Lint-57. 3Sum Closest.ts │ │ ├── 653. Two Sum IV - Input is a BST.ts │ │ ├── Lint-587. Two Sum - Unique pairs.ts │ │ ├── 167. Two Sum II - Input array is sorted.ts │ │ ├── 170. Two Sum III - Data structure design.ts │ │ ├── Lint-443. Two Sum - Greater than target.ts │ │ ├── Lint-533. Two Sum - Closet to target.ts │ │ ├── Lint-609. Two Sum - Less than or equals to target.ts │ │ └── Lint-610. Two Sum - Difference equals to target.ts │ ├── 数组 │ │ ├── 283.Move Zeroes.ts │ │ ├── 43. Multiply Strings.ts │ │ ├── 88.Merge Sorted Array.ts │ │ ├── 969. Pancake Sorting.ts │ │ ├── 42. Trapping Rain Water.ts │ │ ├── Lint-143. Sort Color II.ts │ │ ├── Lint-31. Partition Array.ts │ │ ├── 347. Top K Frequent Elements.ts │ │ ├── 349. Intersection of Two Arrays.ts │ │ ├── 845. Longest Mountain in Array.ts │ │ ├── Lint-544. Top k Largest Numbers.ts │ │ ├── Lint-625. Partition Array II.ts │ │ ├── 215.Kth Largest Element in an Array.ts │ │ ├── 350. Intersection of Two Arrays II.ts │ │ ├── 80.Remove Duplicates from Sorted Array II.ts │ │ ├── Lint-461. Kth Smallest Numbers in Unsorted Array.ts │ │ ├── 必背 75.Sort Colors.ts │ │ ├── 必背 912.Sort an Array (Quick Sort and Merge Sort).ts │ │ └── 必背 26.Remove Duplicates from Sorted Array.ts │ ├── 区间 │ │ ├── 252. Meeting Rooms.ts │ │ ├── 56. Merge Intervals.ts │ │ ├── 57. Insert Interval.ts │ │ ├── 986. Interval List Intersections.ts │ │ ├── 重点 Lint-391. Number of Airplanes in the Sky.ts │ │ └── 253. Meeting Rooms II.ts │ ├── 滑动窗口 │ │ ├── Lint-604. Window Sum.ts │ │ ├── 11. Container With Most Water.ts │ │ ├── 209. Minimum Size Subarray Sum.ts │ │ ├── 239. Sliding Window Maximum.ts │ │ ├── 567. Permutation in String.ts │ │ ├── 76. Minimum Window Substring.ts │ │ ├── 713. Subarray Product Less Than K.ts │ │ ├── 727. Minimum Window Subsequence.ts │ │ ├── 重点 3. Longest Substring Without Repeating Characters.ts │ │ ├── 395. Longest Substring with At Least K Repeating Characters.ts │ │ └── 480. Sliding Window Median.ts │ ├── 链表 │ │ ├── 141. Linked List Cycle.ts │ │ ├── 86. Partition List.ts │ │ ├── 142. Linked List Cycle II.ts │ │ ├── 234. Palindrome Linked List.ts │ │ ├── 328. Odd Even Linked List.ts │ │ ├── 287. Find the Duplicate Number.ts │ │ ├── 876. Middle of the Linked List.ts │ │ ├── 必背 21. Merge Two Sorted Lists.ts │ │ └── 160. Intersection of Two Linked Lists.ts │ ├── 前缀和 │ │ ├── 560. Subarray Sum Equals K.ts │ │ ├── 重点 53. Maximum Subarray.ts │ │ ├── 528. Random Pick with Weight.ts │ │ ├── 238. Product of Array Except Self.ts │ │ ├── 303. Range Sum Query - Immutable.ts │ │ └── 325. Maximum Size Subarray Sum Equals k.ts │ ├── 回文字符串 │ │ ├── 125. Valid Palindrome.ts │ │ ├── 重点 680. Valid Palindrome II.ts │ │ ├── 重点 345. Reverse Vowels of a String.ts │ │ └── 重点 5. Longest Palindromic Substring.ts │ ├── 流 │ │ ├── 346. Moving Average from Data Stream.ts │ │ ├── 352. Data Stream as Disjoint Intervals.ts │ │ ├── 703. Kth Largest Element in a Stream.ts │ │ └── 重点 295. Find Median from Data Stream.ts │ └── index.md ├── 1.二分法 21 │ ├── 答案二分法 6 │ │ ├── 69.Sqrt(x).ts │ │ ├── Lint-183. Wood Cut.ts │ │ ├── Lint-437. Copy Books.ts │ │ ├── Lint-438. Copy Books II.ts │ │ ├── 必背 875.Koko Eating Bananas.ts │ │ └── 必背 1283.Find the Smallest Divisor Given a Threshold.ts │ ├── 朴素二分法 (7) │ │ ├── 必背 704.Binary Search.ts │ │ ├── 278.First Bad Version.ts │ │ ├── 658.Find K Closest Elements.ts │ │ ├── 153.Find Minimum in Rotated Sorted Array.ts │ │ ├── 154.Find Minimum in Rotated Sorted Array II.ts │ │ ├── 必背 702.Search in a Sorted Array of Unknown Size - 副本.ts │ │ └── 必背 34.Find First and Last Position of Element in Sorted Array.ts │ ├── 条件二分法 (7) │ │ ├── 必背 162.Find Peak Element.ts │ │ ├── 必背 74.Search a 2D Matrix.ts │ │ ├── 852.Peak Index in a Mountain Array.ts │ │ ├── 必背 4.Median of Two Sorted Arrays.ts │ │ ├── 81. Search in Rotated Sorted Array II.ts │ │ ├── 必背 33.Search in Rotated Sorted Array.ts │ │ └── 302.Smallest Rectangle Enclosing Black Pixels.ts │ └── index.md ├── 6.数据结构 76 │ ├── 链表 │ │ ├── 148. Sort List.ts │ │ ├── 86. Partition List.ts │ │ ├── 141. Linked List Cycle.ts │ │ ├── 142. Linked List Cycle II.ts │ │ ├── 206. Reverse Linked List.ts │ │ ├── 328. Odd Even Linked List.ts │ │ ├── 445. Add Two Numbers II.ts │ │ ├── 重点 2. Add Two Numbers.ts │ │ ├── 234. Palindrome Linked List.ts │ │ ├── 876. Middle of the Linked List.ts │ │ ├── 92. Reverse Linked List II.ts │ │ ├── 重点 21. Merge Two Sorted Lists.ts │ │ ├── 138. Copy List with Random Pointer.ts │ │ ├── 203. Remove Linked List Elements.ts │ │ ├── 160. Intersection of Two Linked Lists.ts │ │ └── 83. Remove Duplicates from Sorted List.py │ ├── 哈希表 │ │ ├── 290. Word Pattern.ts │ │ ├── 49. Group Anagrams.ts │ │ ├── 重点 706. Design HashMap.ts │ │ ├── 560. Subarray Sum Equals K.ts │ │ ├── 128. Longest Consecutive Sequence.ts │ │ └── 953. Verifying an Alien Dictionary.ts │ ├── 扫描线 │ │ ├── 252. Meeting Rooms.ts │ │ ├── 253. Meeting Rooms II.ts │ │ └── Lint-391. Number of Airplanes in the Sky.ts │ ├── 数组 │ │ ├── 289. Game of Life.ts │ │ ├── 48. Rotate Image.ts │ │ ├── 54. Spiral Matrix.ts │ │ ├── 73. Set Matrix Zeroes.ts │ │ └── 442. Find All Duplicates in an Array.ts │ ├── 栈 │ │ ├── 20. Valid Parentheses.ts │ │ ├── 224. Basic Calculator.ts │ │ ├── 394. Decode String.ts │ │ ├── 85. Maximal Rectangle.ts │ │ ├── 227. Basic Calculator II.ts │ │ ├── 1249. Minimum Remove to Make Valid Parentheses.ts │ │ └── 重点 155. Min Stack.ts │ ├── 二叉索引树和段树 │ │ ├── 493. Reverse Pairs.ts │ │ ├── 715. Range Module.ts │ │ ├── 327. Count of Range Sum.ts │ │ ├── 重点 307. Range Sum Query - Mutable.ts │ │ └── 315. Count of Smaller Numbers After Self.ts │ ├── 堆 │ │ ├── 480. Sliding Window Median.ts │ │ ├── 692. Top K Frequent Words.ts │ │ ├── 767. Reorganize String.ts │ │ ├── 347. Top K Frequent Elements.ts │ │ ├── 973. K Closest Points to Origin.ts │ │ ├── 重点 23. Merge k Sorted Lists.ts │ │ ├── 295. Find Median from Data Stream.ts │ │ └── 703. Kth Largest Element in a Stream.ts │ ├── 复杂数据结构 │ │ ├── 重点 146. LRU Cache.ts │ │ ├── 重点 460. LFU Cache.ts │ │ ├── 1396. Design Underground System.ts │ │ ├── 528. Random Pick with Weight.ts │ │ ├── 981. Time Based Key-Value Store.ts │ │ ├── 380. Insert Delete GetRandom O(1).ts │ │ ├── 588. Design In-Memory File System.ts │ │ └── 211. Design Add and Search Words Data Structure.ts │ ├── 字符串 │ │ ├── 13. Roman to Integer.ts │ │ ├── 443. String Compression.ts │ │ ├── 6. ZigZag Conversion.ts │ │ ├── 68. Text Justification.ts │ │ └── 14. Longest Common Prefix.ts │ ├── 单调栈 │ │ ├── 239. Sliding Window Maximum.ts │ │ ├── 84. Largest Rectangle in Histogram.ts │ │ ├── 1019. Next Greater Node In Linked List.ts │ │ └── 重点 300. Longest Increasing Subsequence (Patience Sort).ts │ ├── 字典树 │ │ ├── 1032. Stream of Characters.ts │ │ ├── 重点 208. Implement Trie (Prefix Tree).ts │ │ └── 211. Design Add and Search Words Data Structure.ts │ ├── 并查集 │ │ ├── 305. Number of Islands II.ts │ │ ├── 重点 200. Number of Islands.ts │ │ └── 323. Number of Connected Components in an Undirected Graph.ts │ └── index.md ├── 3.广度优先搜索 BFS 33 │ ├── 矩阵 │ │ ├── 490. The Maze.ts │ │ ├── 542. 01 Matrix.ts │ │ ├── 505. The Maze II.ts │ │ ├── 733. Flood Fill.ts │ │ ├── 773. Sliding Puzzle.ts │ │ ├── 994. Rotting Oranges.ts │ │ ├── 305. Number of Islands II.ts │ │ ├── Lint-598. Zombie in Matrix.ts │ │ ├── Lint-794. Sliding Puzzle II.ts │ │ ├── 重点 200. Number of Islands.ts │ │ ├── Lint-573. Build Post Office II.ts │ │ └── Lint-611. Knight Shortest Path.ts │ ├── 图 │ │ ├── 127. Word Ladder.ts │ │ ├── 1306. Jump Game III.ts │ │ ├── 841. Keys and Rooms.ts │ │ ├── Lint-531. Six Degree.ts │ │ ├── 重点 133. Clone Graph.ts │ │ ├── 261. Graph Valid Tree.ts │ │ ├── Lint-618. Search Graph Nodes.ts │ │ ├── Lint-624. Remove Substrings.ts │ │ └── 323. Number of Connected Components in an Undirected Graph.ts │ ├── 拓扑排序 │ │ ├── 207. Course Schedule.ts │ │ ├── 269. Alien Dictionary.ts │ │ ├── 210. Course Schedule II.ts │ │ ├── 444. Sequence Reconstruction.ts │ │ └── 重点 Lint-127. Topological Sorting.ts │ ├── 二叉树 │ │ ├── 513. Find Bottom Left Tree Value.ts │ │ ├── 102. Binary Tree Level Order Traversal.ts │ │ ├── 107. Binary Tree Level Order Traversal II.ts │ │ ├── 103. Binary Tree Zigzag Level Order Traversal.ts │ │ ├── 重点 297. Serialize and Deserialize Binary Tree.ts │ │ └── Lint-242. Convert Binary Tree to Linked Lists by Depth.ts │ └── index.md ├── 4.二叉树与递归 38 │ ├── 判断树的形态 │ │ ├── 100. Same Tree.ts │ │ ├── 101. Symmetric Tree.ts │ │ ├── 110. Balanced Binary Tree.ts │ │ └── 98. Validate Binary Search Tree.ts │ ├── 路径相关问题 │ │ ├── 112. Path Sum.ts │ │ ├── 113. Path Sum II.ts │ │ ├── 124. Binary Tree Maximum Path Sum.ts │ │ ├── 298. Binary Tree Longest Consecutive Sequence.ts │ │ ├── Lint-475. Binary Tree Maximum Path Sum II.ts │ │ ├── 549. Binary Tree Longest Consecutive Sequence II.ts │ │ └── Lint-619. Binary Tree Longest Consecutive Sequence III.ts │ ├── 子树相关问题 │ │ ├── Lint-596. Minimum Subtree.ts │ │ ├── 104. Maximum Depth of Binary Tree.ts │ │ ├── 111. Minimum Depth of Binary Tree.ts │ │ ├── 333. Largest BST Subtree.ts │ │ └── Lint-597. Subtree with Maximum Average.ts │ ├── 其他 │ │ ├── 199. Binary Tree Right Side View.ts │ │ ├── 449. Serialize and Deserialize BST.ts │ │ ├── 513. Find Bottom Left Tree Value.ts │ │ ├── 114. Flatten Binary Tree to Linked List.ts │ │ └── 331. Verify Preorder Serialization of a Binary Tree.ts │ ├── 遍历器相关 │ │ ├── 285. Inorder Successor in BST.ts │ │ ├── 230. Kth Smallest Element in a BST.ts │ │ ├── 510. Inorder Successor in BST II.ts │ │ ├── 270. Closest Binary Search Tree Value.ts │ │ ├── 272. Closest Binary Search Tree Value II.ts │ │ ├── Lint-915. Inorder Predecessor in BST II.ts │ │ └── 173. Binary Search Tree Iterator.java │ ├── LCA问题 │ │ ├── Lint-474. Lowest Common Ancestor II.ts │ │ ├── Lint-578. Lowest Common Ancestor III.ts │ │ └── 236. Lowest Common Ancestor of a Binary Tree.ts │ ├── 前中后序遍历 │ │ ├── 重点 144. Binary Tree Preorder Traversal.ts │ │ ├── 重点 145. Binary Tree Postorder Traversal.ts │ │ └── 重点 94. Binary Tree Inorder Traversal.ts │ ├── 反向复原二叉树 │ │ ├── 106. Construct Binary Tree from Inorder and Postorder Traversal.ts │ │ ├── 889. Construct Binary Tree from Preorder and Postorder Traversal.ts │ │ └── 重点 105. Construct Binary Tree from Preorder and Inorder Traversal.ts │ └── index.md ├── 5.深度优先搜索 DFS 32 │ ├── 图 │ │ ├── 494. Target Sum.ts │ │ ├── 126. Word Ladder II.ts │ │ ├── 140. Word Break II.ts │ │ ├── 290. Word Pattern.ts │ │ ├── 291. Word Pattern II.ts │ │ └── 1192. Critical Connections in a Network.ts │ ├── 排列组合 │ │ ├── 51. N-Queens.ts │ │ ├── 37. Sudoku Solver.ts │ │ ├── 46. Permutations.ts │ │ ├── 52. N-Queens II.ts │ │ ├── 重点 78. Subsets.ts │ │ ├── 重点 90. Subsets II.ts │ │ ├── Lint-680. Split String.ts │ │ ├── 重点 39. Combination Sum.ts │ │ ├── 重点 47. Permutations II.ts │ │ ├── 重点 77. Combinations.ts │ │ ├── 22. Generate Parentheses.ts │ │ ├── 254. Factor Combinations.ts │ │ ├── 93. Restore IP Addresses.ts │ │ ├── 重点 40. Combination Sum II.ts │ │ ├── 131. Palindrome Partitioning.ts │ │ ├── 301. Remove Invalid Parentheses.ts │ │ ├── 491. Increasing Subsequences.ts │ │ ├── Lint-10. String Permutation II.ts │ │ ├── Lint-570. Find the Missing Number II.ts │ │ └── 17. Letter Combinations of a Phone Number.ts │ ├── 二叉树 │ │ ├── 113. Path Sum II.ts │ │ ├── 257. Binary Tree Paths.ts │ │ ├── Lint-246. Binary Tree Path Sum II.ts │ │ ├── Lint-376. Binary Tree Path Sum.ts │ │ └── Lint-472. Binary Tree Path Sum III.ts │ └── index.md └── 7.动态规划DP 42 │ ├── Greedy贪心 │ ├── 55. Jump Game.ts │ ├── 45. Jump Game II.ts │ └── 763. Partition Labels.ts │ ├── 其他 │ ├── 639. Decode Ways II.ts │ ├── 重点 91. Decode Ways.ts │ ├── 279. Perfect Squares.ts │ ├── Lint-395. Coins in a Line II.ts │ ├── Lint-396. Coins in a Line III.ts │ ├── 重点 Lint-394. Coins in a Line.ts │ └── 132. Palindrome Partitioning II.ts │ ├── 单序列 │ ├── 256. Paint House.ts │ ├── 重点 139. Word Break.ts │ ├── 265. Paint House II.ts │ ├── Lint-843. Digital Flip.ts │ ├── 122. Best Time to Buy and Sell Stock II.ts │ ├── 123. Best Time to Buy and Sell Stock III.ts │ ├── 188. Best Time to Buy and Sell Stock IV.ts │ └── 重点 121. Best Time to Buy and Sell Stock.ts │ ├── 双序列 │ ├── 72. Edit Distance.ts │ ├── 44. Wildcard Matching.ts │ ├── 97. Interleaving String.ts │ ├── 115. Distinct Subsequences.ts │ ├── 1143. Longest Common Subsequence.ts │ └── 重点 10. Regular Expression Matching.ts │ ├── 矩阵 │ ├── 221. Maximal Square.ts │ ├── 361. Bomb Enemy.ts │ ├── 重点 62. Unique Paths.ts │ ├── 64. Minimum Path Sum.ts │ ├── 85. Maximal Rectangle.ts │ └── 重点 63. Unique Paths II.ts │ ├── 背包问题 │ ├── 474. Ones and Zeroes.ts │ ├── Lint-125. Backpack II.ts │ ├── Lint-440. Backpack III.ts │ ├── Lint-562. Backpack IV.ts │ ├── Lint-563. Backpack V.ts │ ├── 重点 Lint-92. Backpack.ts │ ├── Lint-971. Surplus Value Backpack.ts │ └── Lint-564. Backpack VI (Combination Sum IV).ts │ └── Sections │ ├── 87. Scramble String.ts │ ├── 重点 312. Burst Balloons.ts │ └── 重点 516. Longest Palindromic Subsequence.ts ├── .gitignore ├── 7.Canada Collections 110p ├── BFS │ ├── 图 │ │ ├── 815. Bus Routes.ts │ │ ├── 752. Open the Lock.ts │ │ ├── 130. Surrounded Regions.ts │ │ ├── 1091. Shortest Path in Binary Matrix.ts │ │ └── 1293. Shortest Path in a Grid with Obstacles Elimination.ts │ └── 树 │ │ └── 314 Binary Tree Vertical Order Traversal.ts ├── DFS │ ├── 记忆化搜索 │ │ ├── 403 Frog Jump.ts │ │ ├── 377 Combination Sum IV.ts │ │ ├── 472 Concatenated Words.ts │ │ ├── 1216 Valid Palindrome III.ts │ │ ├── 1235 Maximum Profit in Job Scheduling.ts │ │ ├── 329 Longest Increasing Path in a Matrix.ts │ │ └── 1335 Minimum Difficulty of a Job Schedule.ts │ ├── 图 │ │ ├── 1087 Brace Expansion.ts │ │ ├── 399 Evaluate Division.ts │ │ ├── 586 Score of Parentheses.ts │ │ ├── 694 Number of Distinct Islands.ts │ │ ├── 1274 Number of Ships in a Rectangle.ts │ │ ├── 1376 Time Needed to Inform All Employees.ts │ │ ├── 341 Flatten Nested List Iterator (339 364).ts │ │ └── 212 Word Search II (I, II).ts │ ├── 树 │ │ ├── 226 Invert Binary Tree.ts │ │ ├── 543 Diameter of Binary Tree.ts │ │ ├── 572 Subtree of Another Tree.ts │ │ ├── 951 Flip Equivalent Binary Trees.ts │ │ ├── 1110 Delete Nodes And Return Forest.ts │ │ ├── 863 All Nodes Distance K in Binary Tree.ts │ │ ├── 1485 Clone Binary Tree With Random Pointer.ts │ │ └── 987 Vertical Order Traversal of a Binary Tree.ts │ ├── 二叉搜索树BST │ │ ├── 669 Trim a Binary Search Tree.ts │ │ ├── 700 Search in a Binary Search Tree.ts │ │ ├── 108 Convert Sorted Array to Binary Search Tree.ts │ │ └── 235 Lowest Common Ancestor of a Binary Search Tree.ts │ └── 排列组合 │ │ ├── 698 Partition to K Equal Sum Subsets.ts │ │ └── 526 Beautiful Arrangement (similar to 46).ts ├── Sort │ ├── 179.Largest Number.ts │ └── 27.Remove elements.ts ├── TreeMap │ ├── 729 My Calendar I.ts │ ├── 846 Hand of Straights.ts │ ├── 318 Count of Smaller Numbers After Self (这个题线段树、二分索引树、TreeMap 都可以).ts │ └── index.md ├── Two Pointers │ ├── 相向双指针 │ │ ├── 454. 4Sum II.ts │ │ ├── 16. 3Sum Closest.ts │ │ ├── 277. Find the Celebrity.ts │ │ └── 1. Two Sum (这里使用的是先排序的双指针算法,不同于hashmap做法).ts │ ├── 背向双指针 │ │ └── 409. Longest Palindrome.ts │ └── 同向双指针 难 │ │ ├── 1004 Max Consecutive Ones II.ts │ │ ├── 424. Longest Repeating Character Replacement.ts │ │ └── 340. Longest Substring with At Most K Distinct Characters.ts ├── Dynamic Table │ ├── 174 Dungeon Game.ts │ ├── 198 House Robber.ts │ ├── 322 Coin Change.ts │ ├── 1140 Stone Game II.ts │ ├── 213 House Robber II.ts │ ├── 70 Climbing Stairs.ts │ ├── 740 Delete and Earn.ts │ ├── 1048 Longest String Chain.ts │ ├── 32 Longest Valid Parentheses.ts │ ├── 1043 Partition Array for Maximum Sum.ts │ ├── 712 Minimum ASCII Delete Sum for Two Strings.ts │ ├── 1235 Maximum Profit in Job Scheduling (DP + binary search).ts │ ├── 518 Coin Change II (01 背包型).ts │ ├── 368 Largest Divisible Subset (接龙型 dp).ts │ ├── 354 Russian Doll Envelopes (接龙型 dp, 300 的 2D 版).ts │ ├── 674 Longest Continuous Increasing Subsequence (接龙型 dp).ts │ ├── 718 Maximum Length of Repeated Subarray (和 1062 本质上一样).ts │ ├── 1277 Count Square Submatrices with All Ones (可以使用 221 一样的解法).ts │ └── 1062 Longest Repeating Substring (dp 方法与 longest common substring 一致).ts ├── Hashmap │ ├── 299. Bulls and Cows.ts │ ├── 348 Design Tic-Tac-Toe.ts │ └── 146. LRU Cache (Python 中可以使用 OrderedDict 来代替).ts ├── Queue │ ├── 281. Zigzag Iterator.ts │ ├── 362. Design Hit Counte.ts │ ├── 1429. First Unique Number.ts │ └── 225. Implement Stack using Queues.ts ├── Trie 字典树 │ ├── 212 Word Search II.ts │ └── 1268 Search Suggestions System.ts ├── Union Find │ ├── 721 Accounts Merge.ts │ ├── 547 Number of Provinces.ts │ └── 737 Sentence Similarity II.ts ├── Heap/Priority Queue │ ├── 1086. High Five.ts │ ├── 264. Ugly Number II.ts │ ├── 895. Maximum Frequency Stack.ts │ ├── 378. Kth Smallest Element in a Sorted Matrix.ts │ └── 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit (这个题用单调双端队列、TreeMap、双 heap 都可以).ts ├── Stack │ ├── 735. Asteroid Collisio.ts │ ├── 1472. Design Browser History.ts │ ├── 232. Implement Queue using Stacks.ts │ ├── 150. Evaluate Reverse Polish Notation.ts │ └── 1209. Remove All Adjacent Duplicates in String II.ts ├── Sweep Line │ ├── 218 The Skyline Problem.ts │ └── 759 Employee Free Time.ts ├── Binary Search │ ├── 隐式二分法 │ │ ├── 1891. Cutting Ribbons.ts │ │ ├── 1062. Longest Repeating Substring.ts │ │ ├── 644. Maximum Average Subarray II.ts │ │ ├── 1060. Missing Element in Sorted Array.ts │ │ ├── 540. Single Element in a Sorted Array.ts │ │ └── 1300. Sum of Mutated Array Closest to Target.ts │ └── 显式二分法 │ │ ├── 240. Search a 2D Matrix II.ts │ │ └── 1095. Find in Mountain Array.ts ├── Monotone Stack (Queue) │ ├── 739 Daily Temperatures.ts │ ├── 901 Online Stock Span.ts │ ├── 503 Next Greater Element II.ts │ └── 907 Sum of Subarray Minimums (与 84 类似).ts └── Prefix Sum │ ├── 523 Continuous Subarray Sum.ts │ ├── 304 Range Sum Query 2D - Immutable.ts │ ├── 1423 Maximum Points You Can Obtain from Cards.ts │ └── 1031 Maximum Sum of Two Non-Overlapping Subarrays.ts ├── 6.Challenges 310p.zip ├── 5.Daily Challenge ├── test.js ├── 217. 存在重复元素.ts ├── 242. 有效的字母异位词.js ├── 104. 二叉树的最大深度.js ├── 137. 只出现一次的数字 II.js ├── 0_最大公约数_最小公倍数.js ├── 1492. n 的第 k 个因子.js ├── 0_复杂度.js ├── 283.移动零.js ├── 0_技巧总结.js ├── upstairs.js ├── 538. 把二叉搜索树转换为累加树.js ├── 509. 斐波那契数.js ├── 1010. 总持续时间可被 60 整除的歌曲.js ├── 92.反转链表 II.js ├── 714. 买卖股票的最佳时机含手续费.js ├── 976. 三角形的最大周长.js ├── 452. 用最少数量的箭引爆气球.js ├── 766.托普利茨矩阵.js ├── 888. 公平的糖果棒交换.js ├── 563. 二叉树的坡度.js ├── 633. 平方数之和.js ├── 978. 最长湍流子数组.js ├── 278. 第一个错误的版本.ts ├── 204.计算质数.js ├── 268. Missing Number.js ├── 80.删除排序数组中的重复项 II.js ├── 118.杨辉三角.js ├── 144. 二叉树的前序遍历.js ├── 941. 有效的山脉数组.js ├── 865. 具有所有最深节点的最小子树.js ├── 337. 打家劫舍 III.js ├── 1356. 根据数字二进制下 1 的数目排序.js ├── 455. 分发饼干.js ├── 56.合并区间.js ├── 867. 转置矩阵.js ├── 123. 买卖股票的最佳时机 III.js ├── 110. 平衡二叉树.js ├── 389. 找不同.js ├── 754. 到达终点数字.js ├── 完全二叉树的节点个数.js ├── 290. 单词规律.js ├── 86. 分隔链表.js ├── 369. 给单链表加一.js ├── 1026. 节点与其祖先之间的最大差值.js ├── 387. 字符串中的第一个唯一字符.js ├── 746. 使用最小花费爬楼梯.js ├── 1015. 可被 K 整除的最小整数.js ├── 1081. 不同字符的最小子序列.js ├── 117. 填充每个节点的下一个右侧节点指针 II.js ├── 643. 子数组最大平均数 I.js ├── 1046. 最后一块石头的重量.js ├── 49. 字母异位词分组.js ├── 48. 旋转图像.js ├── 57.插入区间.js ├── 1272. 删除区间.js ├── 116. 填充每个节点的下一个右侧节点指针.js ├── 216. 组合总和 III.js ├── 858.镜面反射.js ├── 830. 较大分组的位置.js ├── 237. Delete Node in a Linked List.js ├── 649. Dota2 参议院.js ├── 147. 对链表进行插入排序(升序排序).js ├── 205. 同构字符串.js ├── 277.搜索名人.js ├── 327. 区间和的个数.js ├── 605. 种花问题1206.js ├── BFS │ └── 103. Binary Tree Zigzag Level Order Traversal.js ├── DFS │ └── 101 Symmetric Tree.js ├── 7. 整数反转.ts ├── 832. 翻转图像.js ├── 977. 有序数组的平方.js ├── 334. 递增的三元子序列.js ├── 98. 验证二叉搜索树.js ├── 424.替换后的最长重复字符串.js ├── 316. 去除重复字母.js ├── 1207. 独一无二的出现次数.js └── 1602. 找到二叉树中最近的右侧节点.js ├── .prettierrc.js ├── 4.Basic Challenge ├── 1 反转字符串.js ├── 27阶乘.js ├── 9排序_冒泡排序.js ├── 11排序_插入排序.js ├── 17贪心算法_人民币支付.js ├── 23_随机生成指定长度的字符串.js ├── 1_数组拆分.js ├── 21_单词是否是回文.js ├── 25url加密解密.js ├── 10排序_选择排序.js ├── 5 求数组min之和.js ├── 16递归的缺点以及解决方案.js ├── 4 种花问题.js ├── 1_转置算法.js └── 25url加密解密.html ├── 3.Data Structure ├── temp.js ├── Node中Buffer对象.js ├── 13.补充_算法方法知识点.js ├── temp.html └── 11.基础_条件问题.js ├── 2.剑指Offer ├── 位运算_√ │ ├── 65. 不用加减乘除做加法.js │ └── 15二进制中1的个数.js ├── 0 test.js ├── 数组+字符串_√ │ ├── test.js │ ├── 5替换空格.js │ ├── 11旋转数组的最小数字.js │ ├── 67. 正则_把字符串转换成整数.js │ ├── 17打印从1到最大的n位数.js │ ├── 61. 扑克牌中的顺子.js │ ├── 58 - II. 左旋转字符串.js │ ├── 20. 表示数值的字符串.js │ ├── 45. 把数组排成最小的数.js │ ├── 40. 最小的k个数.js │ ├── 53 - I. 在排序数组中查找数字 I.js │ ├── 21.调整数组顺序使奇数位于偶数前面.js │ ├── 53 - II. 0- n-1中缺失的数字.js │ └── 58 - I. 翻转单词顺序.js ├── 递归_√ │ └── 64. 求1+2+…+n .js ├── 动态规划_√ │ ├── 14剪绳子2_大数取模.js │ ├── test.js │ ├── 10 青蛙跳台阶.js │ └── 63. 股票的最大利润.js ├── DFS_深度遍历_√ │ ├── 55 - I. 二叉树的深度.js │ ├── 54. 二叉搜索树的第 k 大节点.js │ ├── 36. 二叉搜索树与双向链表.js │ └── 35. 复杂链表的复制.js ├── 链表_√ │ ├── 18删除链表的节点.js │ ├── 25合并两个排序的链表.js │ └── 52. 两个链表的第一个公共节点.js ├── 二叉树_√ │ └── 68 - II. 二叉树的最近公共祖先.js ├── 哈希表_√ │ ├── 2二维数组中的查找.js │ └── 50. 第一个只出现一次的字符.js └── 栈和队列_√ │ └── 9用两个栈实现队列.js ├── tsconfig.json ├── Algorithm-JS.iml └── package.json /1.算法框架_labuladong/16.图/Prim算法/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/18.未分类题目/877石头游戏.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /8.Huahua-leetcode/1.Tree/test.java: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/15. 3Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/18. 4Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | yarn.lock -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/答案二分法 6/69.Sqrt(x).ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/重点 1. Two Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/283.Move Zeroes.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/148. Sort List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/区间/252. Meeting Rooms.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/区间/56. Merge Intervals.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/区间/57. Insert Interval.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/259. 3Sum Smaller.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/43. Multiply Strings.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/88.Merge Sorted Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/969. Pancake Sorting.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/Lint-604. Window Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/141. Linked List Cycle.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/86. Partition List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/490. The Maze.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/542. 01 Matrix.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/判断树的形态/100. Same Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/路径相关问题/112. Path Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/图/494. Target Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/51. N-Queens.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/哈希表/290. Word Pattern.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/哈希表/49. Group Anagrams.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/扫描线/252. Meeting Rooms.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/数组/289. Game of Life.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/数组/48. Rotate Image.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/数组/54. Spiral Matrix.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/栈/20. Valid Parentheses.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/栈/224. Basic Calculator.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/栈/394. Decode String.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/栈/85. Maximal Rectangle.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/86. Partition List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/Greedy贪心/55. Jump Game.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/其他/639. Decode Ways II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/其他/重点 91. Decode Ways.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/单序列/256. Paint House.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/单序列/重点 139. Word Break.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/双序列/72. Edit Distance.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/矩阵/221. Maximal Square.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/矩阵/361. Bomb Enemy.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/矩阵/重点 62. Unique Paths.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/朴素二分法 (7)/必背 704.Binary Search.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/答案二分法 6/Lint-183. Wood Cut.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/答案二分法 6/Lint-437. Copy Books.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/前缀和/560. Subarray Sum Equals K.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/前缀和/重点 53. Maximum Subarray.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/1099. Two Sum Less Than K.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/Lint-382. Triangle Count.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/Lint-57. 3Sum Closest.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/回文字符串/125. Valid Palindrome.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/42. Trapping Rain Water.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/Lint-143. Sort Color II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/Lint-31. Partition Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/142. Linked List Cycle II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/234. Palindrome Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/328. Odd Even Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/127. Word Ladder.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/1306. Jump Game III.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/841. Keys and Rooms.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/Lint-531. Six Degree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/重点 133. Clone Graph.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/505. The Maze II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/733. Flood Fill.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/773. Sliding Puzzle.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/判断树的形态/101. Symmetric Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/路径相关问题/113. Path Sum II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/二叉树/113. Path Sum II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/图/126. Word Ladder II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/图/140. Word Break II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/图/290. Word Pattern.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/图/291. Word Pattern II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/37. Sudoku Solver.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/46. Permutations.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/52. N-Queens II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/重点 78. Subsets.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/重点 90. Subsets II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/二叉索引树和段树/493. Reverse Pairs.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/二叉索引树和段树/715. Range Module.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/哈希表/重点 706. Design HashMap.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/堆/480. Sliding Window Median.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/堆/692. Top K Frequent Words.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/堆/767. Reorganize String.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/复杂数据结构/重点 146. LRU Cache.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/复杂数据结构/重点 460. LFU Cache.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/字符串/13. Roman to Integer.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/字符串/443. String Compression.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/字符串/6. ZigZag Conversion.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/字符串/68. Text Justification.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/扫描线/253. Meeting Rooms II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/数组/73. Set Matrix Zeroes.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/栈/227. Basic Calculator II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/141. Linked List Cycle.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/142. Linked List Cycle II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/206. Reverse Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/328. Odd Even Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/445. Add Two Numbers II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/重点 2. Add Two Numbers.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/Greedy贪心/45. Jump Game II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/其他/279. Perfect Squares.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/单序列/265. Paint House II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/单序列/Lint-843. Digital Flip.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/双序列/44. Wildcard Matching.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/双序列/97. Interleaving String.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/矩阵/64. Minimum Path Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/矩阵/85. Maximal Rectangle.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/矩阵/重点 63. Unique Paths II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/背包问题/474. Ones and Zeroes.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/背包问题/Lint-125. Backpack II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/背包问题/Lint-440. Backpack III.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/背包问题/Lint-562. Backpack IV.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/背包问题/Lint-563. Backpack V.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/背包问题/重点 Lint-92. Backpack.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/朴素二分法 (7)/278.First Bad Version.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/条件二分法 (7)/必背 162.Find Peak Element.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/条件二分法 (7)/必背 74.Search a 2D Matrix.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/答案二分法 6/Lint-438. Copy Books II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/答案二分法 6/必背 875.Koko Eating Bananas.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/前缀和/528. Random Pick with Weight.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/区间/986. Interval List Intersections.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/回文字符串/重点 680. Valid Palindrome II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/347. Top K Frequent Elements.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/349. Intersection of Two Arrays.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/845. Longest Mountain in Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/Lint-544. Top k Largest Numbers.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/Lint-625. Partition Array II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/11. Container With Most Water.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/209. Minimum Size Subarray Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/239. Sliding Window Maximum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/567. Permutation in String.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/76. Minimum Window Substring.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/287. Find the Duplicate Number.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/876. Middle of the Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/必背 21. Merge Two Sorted Lists.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/261. Graph Valid Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/拓扑排序/207. Course Schedule.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/拓扑排序/269. Alien Dictionary.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/994. Rotting Oranges.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/判断树的形态/110. Balanced Binary Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/子树相关问题/Lint-596. Minimum Subtree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/二叉树/257. Binary Tree Paths.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/Lint-680. Split String.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/重点 39. Combination Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/重点 47. Permutations II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/重点 77. Combinations.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/二叉索引树和段树/327. Count of Range Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/单调栈/239. Sliding Window Maximum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/哈希表/560. Subarray Sum Equals K.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/堆/347. Top K Frequent Elements.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/堆/973. K Closest Points to Origin.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/堆/重点 23. Merge k Sorted Lists.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/字典树/1032. Stream of Characters.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/字符串/14. Longest Common Prefix.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/并查集/305. Number of Islands II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/并查集/重点 200. Number of Islands.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/234. Palindrome Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/876. Middle of the Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/92. Reverse Linked List II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/重点 21. Merge Two Sorted Lists.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/Greedy贪心/763. Partition Labels.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/Sections/87. Scramble String.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/Sections/重点 312. Burst Balloons.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/其他/Lint-395. Coins in a Line II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/其他/Lint-396. Coins in a Line III.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/其他/重点 Lint-394. Coins in a Line.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/双序列/115. Distinct Subsequences.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/BFS/图/815. Bus Routes.ts: -------------------------------------------------------------------------------- 1 | // 815. Bus Routes.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/记忆化搜索/403 Frog Jump.ts: -------------------------------------------------------------------------------- 1 | // 403 Frog Jump.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/朴素二分法 (7)/658.Find K Closest Elements.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/前缀和/238. Product of Array Except Self.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/前缀和/303. Range Sum Query - Immutable.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/653. Two Sum IV - Input is a BST.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/Lint-587. Two Sum - Unique pairs.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/回文字符串/重点 345. Reverse Vowels of a String.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/215.Kth Largest Element in an Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/350. Intersection of Two Arrays II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/流/346. Moving Average from Data Stream.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/流/352. Data Stream as Disjoint Intervals.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/流/703. Kth Largest Element in a Stream.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/流/重点 295. Find Median from Data Stream.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/713. Subarray Product Less Than K.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/727. Minimum Window Subsequence.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/链表/160. Intersection of Two Linked Lists.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/Lint-618. Search Graph Nodes.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/Lint-624. Remove Substrings.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/拓扑排序/210. Course Schedule II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/305. Number of Islands II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/Lint-598. Zombie in Matrix.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/Lint-794. Sliding Puzzle II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/重点 200. Number of Islands.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/其他/199. Binary Tree Right Side View.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/其他/449. Serialize and Deserialize BST.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/其他/513. Find Bottom Left Tree Value.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/遍历器相关/285. Inorder Successor in BST.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/22. Generate Parentheses.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/254. Factor Combinations.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/93. Restore IP Addresses.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/重点 40. Combination Sum II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/单调栈/84. Largest Rectangle in Histogram.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/哈希表/128. Longest Consecutive Sequence.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/哈希表/953. Verifying an Alien Dictionary.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/堆/295. Find Median from Data Stream.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/堆/703. Kth Largest Element in a Stream.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/复杂数据结构/1396. Design Underground System.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/复杂数据结构/528. Random Pick with Weight.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/复杂数据结构/981. Time Based Key-Value Store.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/138. Copy List with Random Pointer.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/203. Remove Linked List Elements.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/其他/132. Palindrome Partitioning II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/双序列/1143. Longest Common Subsequence.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/背包问题/Lint-971. Surplus Value Backpack.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/BFS/图/752. Open the Lock.ts: -------------------------------------------------------------------------------- 1 | // 752. Open the Lock.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Sort/179.Largest Number.ts: -------------------------------------------------------------------------------- 1 | //179.Largest Number.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Sort/27.Remove elements.ts: -------------------------------------------------------------------------------- 1 | //27.Remove elements.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/TreeMap/729 My Calendar I.ts: -------------------------------------------------------------------------------- 1 | // 729 My Calendar I.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Two Pointers/相向双指针/454. 4Sum II.ts: -------------------------------------------------------------------------------- 1 | // 454. 4Sum II.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/条件二分法 (7)/852.Peak Index in a Mountain Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/条件二分法 (7)/必背 4.Median of Two Sorted Arrays.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/前缀和/325. Maximum Size Subarray Sum Equals k.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/167. Two Sum II - Input array is sorted.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/170. Two Sum III - Data structure design.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/Lint-443. Two Sum - Greater than target.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/Lint-533. Two Sum - Closet to target.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/回文字符串/重点 5. Longest Palindromic Substring.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/80.Remove Duplicates from Sorted Array II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/二叉树/513. Find Bottom Left Tree Value.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/拓扑排序/444. Sequence Reconstruction.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/拓扑排序/重点 Lint-127. Topological Sorting.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/Lint-573. Build Post Office II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/矩阵/Lint-611. Knight Shortest Path.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/LCA问题/Lint-474. Lowest Common Ancestor II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/LCA问题/Lint-578. Lowest Common Ancestor III.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/其他/114. Flatten Binary Tree to Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/判断树的形态/98. Validate Binary Search Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/子树相关问题/104. Maximum Depth of Binary Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/子树相关问题/111. Minimum Depth of Binary Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/路径相关问题/124. Binary Tree Maximum Path Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/遍历器相关/230. Kth Smallest Element in a BST.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/遍历器相关/510. Inorder Successor in BST II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/二叉树/Lint-246. Binary Tree Path Sum II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/二叉树/Lint-376. Binary Tree Path Sum.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/131. Palindrome Partitioning.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/301. Remove Invalid Parentheses.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/491. Increasing Subsequences.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/Lint-10. String Permutation II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/二叉索引树和段树/重点 307. Range Sum Query - Mutable.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/单调栈/1019. Next Greater Node In Linked List.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/复杂数据结构/380. Insert Delete GetRandom O(1).ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/复杂数据结构/588. Design In-Memory File System.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/字典树/重点 208. Implement Trie (Prefix Tree).ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/数组/442. Find All Duplicates in an Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/160. Intersection of Two Linked Lists.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/双序列/重点 10. Regular Expression Matching.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/图/1087 Brace Expansion.ts: -------------------------------------------------------------------------------- 1 | // 1087 Brace Expansion.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/图/399 Evaluate Division.ts: -------------------------------------------------------------------------------- 1 | // 399 Evaluate Division.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/174 Dungeon Game.ts: -------------------------------------------------------------------------------- 1 | // 174 Dungeon Game.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/198 House Robber.ts: -------------------------------------------------------------------------------- 1 | // 198 House Robber.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/322 Coin Change.ts: -------------------------------------------------------------------------------- 1 | // 322 Coin Change.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Hashmap/299. Bulls and Cows.ts: -------------------------------------------------------------------------------- 1 | // 299. Bulls and Cows.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Queue/281. Zigzag Iterator.ts: -------------------------------------------------------------------------------- 1 | // 281. Zigzag Iterator.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Trie 字典树/212 Word Search II.ts: -------------------------------------------------------------------------------- 1 | // 212 Word Search II.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Union Find/721 Accounts Merge.ts: -------------------------------------------------------------------------------- 1 | // 721 Accounts Merge.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/朴素二分法 (7)/153.Find Minimum in Rotated Sorted Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/条件二分法 (7)/81. Search in Rotated Sorted Array II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/条件二分法 (7)/必背 33.Search in Rotated Sorted Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/区间/重点 Lint-391. Number of Airplanes in the Sky.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/二叉树/102. Binary Tree Level Order Traversal.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/前中后序遍历/重点 144. Binary Tree Preorder Traversal.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/前中后序遍历/重点 145. Binary Tree Postorder Traversal.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/前中后序遍历/重点 94. Binary Tree Inorder Traversal.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/子树相关问题/333. Largest BST Subtree.ts: -------------------------------------------------------------------------------- 1 | // 类似 98 2 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/子树相关问题/Lint-597. Subtree with Maximum Average.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/遍历器相关/270. Closest Binary Search Tree Value.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/遍历器相关/272. Closest Binary Search Tree Value II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/遍历器相关/Lint-915. Inorder Predecessor in BST II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/二叉树/Lint-472. Binary Tree Path Sum III.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/图/1192. Critical Connections in a Network.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/Lint-570. Find the Missing Number II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/扫描线/Lint-391. Number of Airplanes in the Sky.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/栈/1249. Minimum Remove to Make Valid Parentheses.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/单序列/122. Best Time to Buy and Sell Stock II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/单序列/123. Best Time to Buy and Sell Stock III.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/单序列/188. Best Time to Buy and Sell Stock IV.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/单序列/重点 121. Best Time to Buy and Sell Stock.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/背包问题/Lint-564. Backpack VI (Combination Sum IV).ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/BFS/图/130. Surrounded Regions.ts: -------------------------------------------------------------------------------- 1 | // 130. Surrounded Regions.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/树/226 Invert Binary Tree.ts: -------------------------------------------------------------------------------- 1 | // 226 Invert Binary Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/1140 Stone Game II.ts: -------------------------------------------------------------------------------- 1 | // 1140 Stone Game II.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/213 House Robber II.ts: -------------------------------------------------------------------------------- 1 | // 213 House Robber II.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/70 Climbing Stairs.ts: -------------------------------------------------------------------------------- 1 | // 70 Climbing Stairs.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/740 Delete and Earn.ts: -------------------------------------------------------------------------------- 1 | // 740 Delete and Earn.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Hashmap/348 Design Tic-Tac-Toe.ts: -------------------------------------------------------------------------------- 1 | // 348 Design Tic-Tac-Toe.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Heap/Priority Queue/1086. High Five.ts: -------------------------------------------------------------------------------- 1 | // 1086. High Five.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Queue/362. Design Hit Counte.ts: -------------------------------------------------------------------------------- 1 | // 362. Design Hit Counte.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Stack/735. Asteroid Collisio.ts: -------------------------------------------------------------------------------- 1 | // 735. Asteroid Collisio.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/TreeMap/846 Hand of Straights.ts: -------------------------------------------------------------------------------- 1 | // 846 Hand of Straights.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Two Pointers/相向双指针/16. 3Sum Closest.ts: -------------------------------------------------------------------------------- 1 | // 16. 3Sum Closest.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/朴素二分法 (7)/154.Find Minimum in Rotated Sorted Array II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/条件二分法 (7)/302.Smallest Rectangle Enclosing Black Pixels.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/Lint-609. Two Sum - Less than or equals to target.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/和差问题/Lint-610. Two Sum - Difference equals to target.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/Lint-461. Kth Smallest Numbers in Unsorted Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/二叉树/107. Binary Tree Level Order Traversal II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/路径相关问题/298. Binary Tree Longest Consecutive Sequence.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/路径相关问题/Lint-475. Binary Tree Maximum Path Sum II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/排列组合/17. Letter Combinations of a Phone Number.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/二叉索引树和段树/315. Count of Smaller Numbers After Self.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/字典树/211. Design Add and Search Words Data Structure.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/7.动态规划DP 42/Sections/重点 516. Longest Palindromic Subsequence.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/图/586 Score of Parentheses.ts: -------------------------------------------------------------------------------- 1 | // 586 Score of Parentheses.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/记忆化搜索/377 Combination Sum IV.ts: -------------------------------------------------------------------------------- 1 | // 377 Combination Sum IV.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/记忆化搜索/472 Concatenated Words.ts: -------------------------------------------------------------------------------- 1 | // 472 Concatenated Words.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Heap/Priority Queue/264. Ugly Number II.ts: -------------------------------------------------------------------------------- 1 | // 264. Ugly Number II.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Queue/1429. First Unique Number.ts: -------------------------------------------------------------------------------- 1 | // 1429. First Unique Number.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Sweep Line/218 The Skyline Problem.ts: -------------------------------------------------------------------------------- 1 | // 218 The Skyline Problem.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Sweep Line/759 Employee Free Time.ts: -------------------------------------------------------------------------------- 1 | // 759 Employee Free Time.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Union Find/547 Number of Provinces.ts: -------------------------------------------------------------------------------- 1 | // 547 Number of Provinces.ts -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/Kruskal最小生成树算法/Kruskal算法/tempCodeRunnerFile.ts: -------------------------------------------------------------------------------- 1 | 2 | console.log(edges) -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/答案二分法 6/必背 1283.Find the Smallest Divisor Given a Threshold.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/重点 3. Longest Substring Without Repeating Characters.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/二叉树/103. Binary Tree Zigzag Level Order Traversal.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/二叉树/重点 297. Serialize and Deserialize Binary Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/其他/331. Verify Preorder Serialization of a Binary Tree.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/路径相关问题/549. Binary Tree Longest Consecutive Sequence II.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/单调栈/重点 300. Longest Increasing Subsequence (Patience Sort).ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/复杂数据结构/211. Design Add and Search Words Data Structure.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Binary Search/隐式二分法/1891. Cutting Ribbons.ts: -------------------------------------------------------------------------------- 1 | // 1891. Cutting Ribbons.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/树/543 Diameter of Binary Tree.ts: -------------------------------------------------------------------------------- 1 | // 543 Diameter of Binary Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/树/572 Subtree of Another Tree.ts: -------------------------------------------------------------------------------- 1 | // 572 Subtree of Another Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/记忆化搜索/1216 Valid Palindrome III.ts: -------------------------------------------------------------------------------- 1 | // 1216 Valid Palindrome III.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Stack/1472. Design Browser History.ts: -------------------------------------------------------------------------------- 1 | // 1472. Design Browser History.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Union Find/737 Sentence Similarity II.ts: -------------------------------------------------------------------------------- 1 | // 737 Sentence Similarity II.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/朴素二分法 (7)/必背 702.Search in a Sorted Array of Unknown Size - 副本.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/395. Longest Substring with At Least K Repeating Characters.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/路径相关问题/Lint-619. Binary Tree Longest Consecutive Sequence III.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/并查集/323. Number of Connected Components in an Undirected Graph.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/图/694 Number of Distinct Islands.ts: -------------------------------------------------------------------------------- 1 | // 694 Number of Distinct Islands.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/1048 Longest String Chain.ts: -------------------------------------------------------------------------------- 1 | // 1048 Longest String Chain.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Monotone Stack (Queue)/739 Daily Temperatures.ts: -------------------------------------------------------------------------------- 1 | // 739 Daily Temperatures.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Monotone Stack (Queue)/901 Online Stock Span.ts: -------------------------------------------------------------------------------- 1 | // 901 Online Stock Span.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Prefix Sum/523 Continuous Subarray Sum.ts: -------------------------------------------------------------------------------- 1 | // 523 Continuous Subarray Sum.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Two Pointers/相向双指针/277. Find the Celebrity.ts: -------------------------------------------------------------------------------- 1 | // 277. Find the Celebrity.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Two Pointers/背向双指针/409. Longest Palindrome.ts: -------------------------------------------------------------------------------- 1 | // 409. Longest Palindrome.ts -------------------------------------------------------------------------------- /6.Challenges 310p.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/6.Challenges 310p.zip -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/必背 75.Sort Colors.ts: -------------------------------------------------------------------------------- 1 | // https://leetcode.com/problems/sort-colors/ 2 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/二叉树/Lint-242. Convert Binary Tree to Linked Lists by Depth.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/图/323. Number of Connected Components in an Undirected Graph.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Binary Search/显式二分法/240. Search a 2D Matrix II.ts: -------------------------------------------------------------------------------- 1 | // 240. Search a 2D Matrix II.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/二叉搜索树BST/669 Trim a Binary Search Tree.ts: -------------------------------------------------------------------------------- 1 | // 669 Trim a Binary Search Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/树/951 Flip Equivalent Binary Trees.ts: -------------------------------------------------------------------------------- 1 | // 951 Flip Equivalent Binary Trees.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/32 Longest Valid Parentheses.ts: -------------------------------------------------------------------------------- 1 | // 32 Longest Valid Parentheses.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Queue/225. Implement Stack using Queues.ts: -------------------------------------------------------------------------------- 1 | // 225. Implement Stack using Queues.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Stack/232. Implement Queue using Stacks.ts: -------------------------------------------------------------------------------- 1 | // 232. Implement Queue using Stacks.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Trie 字典树/1268 Search Suggestions System.ts: -------------------------------------------------------------------------------- 1 | // 1268 Search Suggestions System.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/朴素二分法 (7)/必背 34.Find First and Last Position of Element in Sorted Array.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/区间/253. Meeting Rooms II.ts: -------------------------------------------------------------------------------- 1 | // 253 Meeting Room II(Meeting Room I也可以使用) 2 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/反向复原二叉树/106. Construct Binary Tree from Inorder and Postorder Traversal.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/反向复原二叉树/889. Construct Binary Tree from Preorder and Postorder Traversal.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/BFS/图/1091. Shortest Path in Binary Matrix.ts: -------------------------------------------------------------------------------- 1 | // 1091. Shortest Path in Binary Matrix.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Binary Search/显式二分法/1095. Find in Mountain Array.ts: -------------------------------------------------------------------------------- 1 | // 1095. Find in Mountain Array.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/图/1274 Number of Ships in a Rectangle.ts: -------------------------------------------------------------------------------- 1 | // 1274 Number of Ships in a Rectangle.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/树/1110 Delete Nodes And Return Forest.ts: -------------------------------------------------------------------------------- 1 | // 1110 Delete Nodes And Return Forest.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Heap/Priority Queue/895. Maximum Frequency Stack.ts: -------------------------------------------------------------------------------- 1 | // 895. Maximum Frequency Stack.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Monotone Stack (Queue)/503 Next Greater Element II.ts: -------------------------------------------------------------------------------- 1 | // 503 Next Greater Element II.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Two Pointers/同向双指针 难/1004 Max Consecutive Ones II.ts: -------------------------------------------------------------------------------- 1 | // 1004 Max Consecutive Ones II.ts -------------------------------------------------------------------------------- /1.算法框架_labuladong/19.高频面试题/test.js: -------------------------------------------------------------------------------- 1 | let arr=[0,1,2,3,4,5,100]; 2 | arr=arr.filter((v,i)=>v!==100) 3 | console.log(arr); -------------------------------------------------------------------------------- /5.Daily Challenge/test.js: -------------------------------------------------------------------------------- 1 | const arr=[1,2,3,4,'aaa',2,222]; 2 | 3 | console.log(arr.splice(4,1)); 4 | console.log(arr); -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/反向复原二叉树/重点 105. Construct Binary Tree from Preorder and Inorder Traversal.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/二叉搜索树BST/700 Search in a Binary Search Tree.ts: -------------------------------------------------------------------------------- 1 | // 700 Search in a Binary Search Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/排列组合/698 Partition to K Equal Sum Subsets.ts: -------------------------------------------------------------------------------- 1 | // 698 Partition to K Equal Sum Subsets.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Prefix Sum/304 Range Sum Query 2D - Immutable.ts: -------------------------------------------------------------------------------- 1 | // 304 Range Sum Query 2D - Immutable.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Stack/150. Evaluate Reverse Polish Notation.ts: -------------------------------------------------------------------------------- 1 | // 150. Evaluate Reverse Polish Notation.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/滑动窗口/480. Sliding Window Median.ts: -------------------------------------------------------------------------------- 1 | // 480. Sliding Window Median (这个题用 TreeMap 超级方便) 2 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/栈/重点 155. Min Stack.ts: -------------------------------------------------------------------------------- 1 | // 155. Min Stack (follow up Leetcode 716 Max Stack).ts 2 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/BFS/树/314 Binary Tree Vertical Order Traversal.ts: -------------------------------------------------------------------------------- 1 | // 314 Binary Tree Vertical Order Traversal.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Binary Search/隐式二分法/1062. Longest Repeating Substring.ts: -------------------------------------------------------------------------------- 1 | // 1062. Longest Repeating Substring.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Binary Search/隐式二分法/644. Maximum Average Subarray II.ts: -------------------------------------------------------------------------------- 1 | // 644. Maximum Average Subarray II.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/图/1376 Time Needed to Inform All Employees.ts: -------------------------------------------------------------------------------- 1 | // 1376 Time Needed to Inform All Employees.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/树/863 All Nodes Distance K in Binary Tree.ts: -------------------------------------------------------------------------------- 1 | // 863 All Nodes Distance K in Binary Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/记忆化搜索/1235 Maximum Profit in Job Scheduling.ts: -------------------------------------------------------------------------------- 1 | // 1235 Maximum Profit in Job Scheduling.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/记忆化搜索/329 Longest Increasing Path in a Matrix.ts: -------------------------------------------------------------------------------- 1 | // 329 Longest Increasing Path in a Matrix.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/1043 Partition Array for Maximum Sum.ts: -------------------------------------------------------------------------------- 1 | // 1043 Partition Array for Maximum Sum.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/图/341 Flatten Nested List Iterator (339 364).ts: -------------------------------------------------------------------------------- 1 | // 341 Flatten Nested List Iterator (339 364).ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/排列组合/526 Beautiful Arrangement (similar to 46).ts: -------------------------------------------------------------------------------- 1 | // 526 Beautiful Arrangement (similar to 46).ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/树/1485 Clone Binary Tree With Random Pointer.ts: -------------------------------------------------------------------------------- 1 | // 1485 Clone Binary Tree With Random Pointer.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/记忆化搜索/1335 Minimum Difficulty of a Job Schedule.ts: -------------------------------------------------------------------------------- 1 | // 1335 Minimum Difficulty of a Job Schedule.ts -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | trailingComma: "es6", 3 | tabWidth: 4, 4 | semi: false, 5 | singleQuote: false, 6 | }; 7 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Binary Search/隐式二分法/1060. Missing Element in Sorted Array.ts: -------------------------------------------------------------------------------- 1 | // 1060. Missing Element in Sorted Array.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Binary Search/隐式二分法/540. Single Element in a Sorted Array.ts: -------------------------------------------------------------------------------- 1 | // 540. Single Element in a Sorted Array.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/树/987 Vertical Order Traversal of a Binary Tree.ts: -------------------------------------------------------------------------------- 1 | // 987 Vertical Order Traversal of a Binary Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/712 Minimum ASCII Delete Sum for Two Strings.ts: -------------------------------------------------------------------------------- 1 | // 712 Minimum ASCII Delete Sum for Two Strings.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Prefix Sum/1423 Maximum Points You Can Obtain from Cards.ts: -------------------------------------------------------------------------------- 1 | // 1423 Maximum Points You Can Obtain from Cards.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/必背 912.Sort an Array (Quick Sort and Merge Sort).ts: -------------------------------------------------------------------------------- 1 | // https://leetcode.com/problems/sort-an-array/ 2 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Binary Search/隐式二分法/1300. Sum of Mutated Array Closest to Target.ts: -------------------------------------------------------------------------------- 1 | // 1300. Sum of Mutated Array Closest to Target.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/二叉搜索树BST/108 Convert Sorted Array to Binary Search Tree.ts: -------------------------------------------------------------------------------- 1 | // 108 Convert Sorted Array to Binary Search Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Heap/Priority Queue/378. Kth Smallest Element in a Sorted Matrix.ts: -------------------------------------------------------------------------------- 1 | // 378. Kth Smallest Element in a Sorted Matrix.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Stack/1209. Remove All Adjacent Duplicates in String II.ts: -------------------------------------------------------------------------------- 1 | // 1209. Remove All Adjacent Duplicates in String II.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/二叉搜索树BST/235 Lowest Common Ancestor of a Binary Search Tree.ts: -------------------------------------------------------------------------------- 1 | // 235 Lowest Common Ancestor of a Binary Search Tree.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Prefix Sum/1031 Maximum Sum of Two Non-Overlapping Subarrays.ts: -------------------------------------------------------------------------------- 1 | // 1031 Maximum Sum of Two Non-Overlapping Subarrays.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Two Pointers/同向双指针 难/424. Longest Repeating Character Replacement.ts: -------------------------------------------------------------------------------- 1 | // 424. Longest Repeating Character Replacement.ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/BFS/图/1293. Shortest Path in a Grid with Obstacles Elimination.ts: -------------------------------------------------------------------------------- 1 | // 1293. Shortest Path in a Grid with Obstacles Elimination.ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/数组/必背 26.Remove Duplicates from Sorted Array.ts: -------------------------------------------------------------------------------- 1 | // https://leetcode.com/problems/remove-duplicates-from-sorted-array/ 2 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/LCA问题/236. Lowest Common Ancestor of a Binary Tree.ts: -------------------------------------------------------------------------------- 1 | // 236 Lowest Common Ancestor of a Binary Tree (相似题:235、1650) 2 | -------------------------------------------------------------------------------- /5.Daily Challenge/217. 存在重复元素.ts: -------------------------------------------------------------------------------- 1 | // 217. 存在重复元素 2 | const containsDuplicate = function (nums: number[]) { 3 | return nums.length !== new Set(nums).size 4 | } 5 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/1235 Maximum Profit in Job Scheduling (DP + binary search).ts: -------------------------------------------------------------------------------- 1 | // 1235 Maximum Profit in Job Scheduling (DP + binary search).ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Two Pointers/同向双指针 难/340. Longest Substring with At Most K Distinct Characters.ts: -------------------------------------------------------------------------------- 1 | // 340. Longest Substring with At Most K Distinct Characters.ts -------------------------------------------------------------------------------- /5.Daily Challenge/242. 有效的字母异位词.js: -------------------------------------------------------------------------------- 1 | // 242. 有效的字母异位词 2 | var isAnagram = function (s, t) { 3 | return Array.from(s).sort().join('') === Array.from(t).sort().join('') 4 | } 5 | -------------------------------------------------------------------------------- /4.Basic Challenge/1 反转字符串.js: -------------------------------------------------------------------------------- 1 | const str='Hello World!'; 2 | Reverse=(data)=>{ 3 | return data.split('').reverse().join(''); 4 | } 5 | const res=Reverse(str); 6 | console.log(res); -------------------------------------------------------------------------------- /7.Canada Collections 110p/DFS/图/212 Word Search II (I, II).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/DFS/图/212 Word Search II (I, II).ts -------------------------------------------------------------------------------- /4.Basic Challenge/27阶乘.js: -------------------------------------------------------------------------------- 1 | const factorial=(n)=>{ 2 | if(n===1 || n===0) return 1 3 | return n*factorial(n-1) 4 | } 5 | 6 | console.log(factorial(4)); //24 7 | console.log(factorial(5)); //120 -------------------------------------------------------------------------------- /5.Daily Challenge/104. 二叉树的最大深度.js: -------------------------------------------------------------------------------- 1 | // 104. 二叉树的最大深度 2 | var maxDepth = function (root) { 3 | if (!root) return 0 4 | return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1 5 | } 6 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/二分图/index.assets/image-20211109195657727.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/二分图/index.assets/image-20211109195657727.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/二分图/index.assets/image-20211109195758476.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/二分图/index.assets/image-20211109195758476.png -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/518 Coin Change II (01 背包型).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Dynamic Table/518 Coin Change II (01 背包型).ts -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/拓扑排序 环检测/index.assets/image-20211108200919765.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/拓扑排序 环检测/index.assets/image-20211108200919765.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/拓扑排序 环检测/index.assets/image-20211108201515013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/拓扑排序 环检测/index.assets/image-20211108201515013.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/拓扑排序 环检测/index.assets/image-20211108201526738.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/拓扑排序 环检测/index.assets/image-20211108201526738.png -------------------------------------------------------------------------------- /3.Data Structure/temp.js: -------------------------------------------------------------------------------- 1 | let myMap = new Map().set(true, 7).set({foo: 3}, ['abc']); 2 | let res=[...myMap] 3 | console.log(res); 4 | 5 | 6 | let obj={'a':'1', 'b':'2','c':'3'} 7 | console.log(Object.values(obj)) -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109205259544.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109205259544.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109205329402.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109205329402.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109205448827.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109205448827.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109205958477.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109205958477.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109210254277.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109210254277.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109212508193.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/图-并查集Union Find算法/index.assets/image-20211109212508193.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/18.未分类题目/test.js: -------------------------------------------------------------------------------- 1 | let str="abcdefg"; 2 | str[0]='???' 3 | console.log(str); 4 | 5 | let dp = new Array(4).fill(0).map((item,index,self)=>{ 6 | return self=new Array(6).fill(0) 7 | }); 8 | console.log(dp); -------------------------------------------------------------------------------- /2.剑指Offer/位运算_√/65. 不用加减乘除做加法.js: -------------------------------------------------------------------------------- 1 | // 65. 不用加减乘除做加法 2 | const add = (a, b) => { 3 | while (b != 0) { 4 | let carry = (a & b) << 1 5 | let n = a ^ b 6 | a = n 7 | b = carry 8 | } 9 | return a 10 | } 11 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/368 Largest Divisible Subset (接龙型 dp).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Dynamic Table/368 Largest Divisible Subset (接龙型 dp).ts -------------------------------------------------------------------------------- /2.剑指Offer/0 test.js: -------------------------------------------------------------------------------- 1 | // const run=()=>{ 2 | // for(let i=0;i<=10;++i){ 3 | // console.log(i); 4 | // } 5 | // } 6 | // run() 7 | 8 | let window={ 9 | 1: 234, 10 | 2:33333 11 | } 12 | console.log(window[1]); -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/test.js: -------------------------------------------------------------------------------- 1 | const test=()=>{ 2 | let a=0,b=10; 3 | while(true){ 4 | // ++a 5 | console.log(a); 6 | if(a==0) break; 7 | console.log("??????") 8 | break; 9 | } 10 | } 11 | test() -------------------------------------------------------------------------------- /7.Canada Collections 110p/Hashmap/146. LRU Cache (Python 中可以使用 OrderedDict 来代替).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Hashmap/146. LRU Cache (Python 中可以使用 OrderedDict 来代替).ts -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/Kruskal最小生成树算法/Kruskal算法/index.assets/image-20211110190005995.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/Kruskal最小生成树算法/Kruskal算法/index.assets/image-20211110190005995.png -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/Kruskal最小生成树算法/Kruskal算法/index.assets/image-20211110190557406.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/1.算法框架_labuladong/16.图/Kruskal最小生成树算法/Kruskal算法/index.assets/image-20211110190557406.png -------------------------------------------------------------------------------- /5.Daily Challenge/137. 只出现一次的数字 II.js: -------------------------------------------------------------------------------- 1 | // 137. 只出现一次的数字 II 2 | const singleNumber = function (arr) { 3 | arr.sort((a, b) => a - b) 4 | for (let i = 0; i < arr.length; i += 3) { 5 | if (arr[i] != arr[i + 1]) return arr[i] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/354 Russian Doll Envelopes (接龙型 dp, 300 的 2D 版).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Dynamic Table/354 Russian Doll Envelopes (接龙型 dp, 300 的 2D 版).ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Monotone Stack (Queue)/907 Sum of Subarray Minimums (与 84 类似).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Monotone Stack (Queue)/907 Sum of Subarray Minimums (与 84 类似).ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Two Pointers/相向双指针/1. Two Sum (这里使用的是先排序的双指针算法,不同于hashmap做法).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Two Pointers/相向双指针/1. Two Sum (这里使用的是先排序的双指针算法,不同于hashmap做法).ts -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/5.深度优先搜索 DFS 32/index.md: -------------------------------------------------------------------------------- 1 | 深度优先搜索 2 | 3 | 基本问题: 4 | (1)DFS 中递归的基本要素 5 | (2)终止条件的选择;回溯;剪枝 6 | (3)什么时候需要排序? 7 | (4)如何去除重复元素?一个元素允许使用多次的情况? 8 | (6)在图上进行 DFS 如何避免回到重复节点 9 | (5)识别一个隐式图,并使用 DFS 10 | (6)在某些情况下,利用记忆化搜索进行优化 11 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/674 Longest Continuous Increasing Subsequence (接龙型 dp).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Dynamic Table/674 Longest Continuous Increasing Subsequence (接龙型 dp).ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/718 Maximum Length of Repeated Subarray (和 1062 本质上一样).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Dynamic Table/718 Maximum Length of Repeated Subarray (和 1062 本质上一样).ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/1277 Count Square Submatrices with All Ones (可以使用 221 一样的解法).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Dynamic Table/1277 Count Square Submatrices with All Ones (可以使用 221 一样的解法).ts -------------------------------------------------------------------------------- /7.Canada Collections 110p/TreeMap/318 Count of Smaller Numbers After Self (这个题线段树、二分索引树、TreeMap 都可以).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/TreeMap/318 Count of Smaller Numbers After Self (这个题线段树、二分索引树、TreeMap 都可以).ts -------------------------------------------------------------------------------- /2.剑指Offer/递归_√/64. 求1+2+…+n .js: -------------------------------------------------------------------------------- 1 | // 64. 求1+2+…+n 2 | /* 3 | 求 1+2+...+n ,要求不能使用乘除法、 4 | for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 5 | 6 | */ 7 | //! 递归,&&逻辑符短路 8 | var sumNums = function (n) { 9 | n > 0 && sumNums(n - 1) + n 10 | return n 11 | } 12 | -------------------------------------------------------------------------------- /5.Daily Challenge/0_最大公约数_最小公倍数.js: -------------------------------------------------------------------------------- 1 | // 0_最大公约数_最小公倍数 2 | // 最大公约数 3 | function gcd(a, b) { 4 | if (b == 0) { 5 | return a 6 | } 7 | var r = a % b 8 | return gcd(b, r) 9 | } 10 | // 最小公倍数 11 | function scm(a, b) { 12 | return (a * b) / gcd(a, b) 13 | } 14 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/最大频率栈/test.ts: -------------------------------------------------------------------------------- 1 | namespace LeetCode895Test { 2 | export const test = () => { 3 | const m = new Map() 4 | m.set(1, [1, 2, 3]) 5 | m.get(1).push(1000) 6 | console.log(m.get(1)) 7 | } 8 | } 9 | 10 | LeetCode895Test.test() 11 | -------------------------------------------------------------------------------- /5.Daily Challenge/1492. n 的第 k 个因子.js: -------------------------------------------------------------------------------- 1 | // 1492. n 的第 k 个因子 2 | function kthFactor(n, k) { 3 | let i = 0 4 | while (k > 0 && i <= n) { 5 | i++ 6 | if (n % i == 0) { 7 | k-- //个数减少 8 | } 9 | } 10 | if (i > n) { 11 | return -1 12 | } 13 | return i 14 | } 15 | -------------------------------------------------------------------------------- /5.Daily Challenge/0_复杂度.js: -------------------------------------------------------------------------------- 1 | // 0_复杂度 2 | /* 3 | log是以2为底的 4 | 😕 5 | O(N^N) 6 | O(N!) 7 | O(2N) 8 | O(N^3) 9 | O(N^2) 动态规划,冒泡,插入,选择,交换 10 | O(N logN) 一般贪心, 快速(不稳定),希尔(不稳定),归并(稳定为N logN), 11 | O(N) 桶排序, 12 | O(logN) 二分法 13 | O(1) 14 | */ 15 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Dynamic Table/1062 Longest Repeating Substring (dp 方法与 longest common substring 一致).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Dynamic Table/1062 Longest Repeating Substring (dp 方法与 longest common substring 一致).ts -------------------------------------------------------------------------------- /5.Daily Challenge/283.移动零.js: -------------------------------------------------------------------------------- 1 | // 283.移动零 2 | function moveZeroes(nums) { 3 | let i = 0 4 | for (let j = 0; j < nums.length; j++) { 5 | //只要不为0就往前挪 6 | if (nums[j] != 0) { 7 | //i指向的值和j指向的值交换 8 | ;[nums[i], nums[j]] = [nums[j], nums[i]] 9 | i++ 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /5.Daily Challenge/0_技巧总结.js: -------------------------------------------------------------------------------- 1 | // 0_技巧总结 2 | for (var a of s) h[a] = (h[a] || 0) + 1 3 | for (var a in h) h[a] < k && n.push(a) 4 | for (let i of s) { 5 | record[i] = (record[i] || 0) + 1 6 | } 7 | 8 | // return A= C? A++ : B===C && C++ 9 | 10 | h.set(s[i], h.has(s[i]) ? h.get(s[i]) + 1 : 1) 11 | -------------------------------------------------------------------------------- /2.剑指Offer/动态规划_√/14剪绳子2_大数取模.js: -------------------------------------------------------------------------------- 1 | // 14剪绳子2_大数取模 2 | var cuttingRope = function (n) { 3 | let arr = [0, 0, 1, 2, 4] 4 | if (n < 5) return arr[n] 5 | const max = 1e9 + 7 6 | let res = 1 7 | while (n >= 5) { 8 | res = (res % max) * 3 9 | n = n - 3 10 | } 11 | return (res * n) % max 12 | } 13 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/5替换空格.js: -------------------------------------------------------------------------------- 1 | // 5替换空格 2 | // 将字符串s中的空格换为%20 3 | /* 4 | 输入:s = "We are happy." 5 | 输出:"We%20are%20happy." 6 | */ 7 | const str = 'We%20are%20happy.' 8 | const replaceSpace = (s) => { 9 | let res = s.replace(/ /gi, '%20') 10 | return res 11 | } 12 | console.log(replaceSpace(str)) 13 | -------------------------------------------------------------------------------- /2.剑指Offer/动态规划_√/test.js: -------------------------------------------------------------------------------- 1 | const a=('1'||0) 2 | // 只要比0大,便会输出 3 | console.log(a); 4 | 5 | console.log(['1','2','100'].reduce((pre,cur)=>Number(pre)+Number(cur))); 6 | 7 | const getSum=(nums)=>{ 8 | let res=0; 9 | while(nums){ 10 | res+=(nums%10); 11 | nums=Math.floor(nums/10); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /5.Daily Challenge/upstairs.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | function climbStairs(n){ 4 | let over=1000000007; 5 | const dp=new Array(n).fill(n); 6 | dp[0]=1; 7 | dp[1]=1; 8 | dp[2]=2; 9 | for(let i=3;i<=n;i++){ 10 | dp[i]=(dp[i-2]+dp[i-1])%over 11 | } 12 | return dp[n]; 13 | } 14 | console.log(climbStairs(8)) 15 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/index.md: -------------------------------------------------------------------------------- 1 | 二叉树与递归 2 | 3 | 基本问题: 4 | (1)理解二叉树、平衡二叉树、二叉搜索树的关系和概念。 5 | (2)理解递归的概念和方法,递归三要素。 6 | (3)在解决递归问题的时候,有时可以返回多个值(Python),或者用一个额外的 class 包装多个值(Java)。 7 | (4)熟练掌握用递归和非递归的方式分别前序、中序、后序遍历二叉树的方法。 8 | (5)理解掌握分治和遍历的区别和联系。 9 | (6)理解掌握 top-down, buttom-up 的思路。 10 | (7)理解掌握二叉树上的 Iterator。 11 | -------------------------------------------------------------------------------- /5.Daily Challenge/538. 把二叉搜索树转换为累加树.js: -------------------------------------------------------------------------------- 1 | // 538. 把二叉搜索树转换为累加树 2 | var convertBST = function (root) { 3 | let sum = 0 4 | const traverse = (root) => { 5 | if (!root) return 6 | traverse(root.right) 7 | sum += root.val 8 | root.val = sum 9 | traverse(root.left) 10 | } 11 | traverse(root) 12 | return root 13 | } 14 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/TreeMap/index.md: -------------------------------------------------------------------------------- 1 | 基础知识:基于红黑树(平衡二叉搜索树)的一种树状 hashmap,增删查改、找求大最小均为 logN 复杂度,Python 当中可以使用 SortedDict 替代;SortedDict 继承了普通的 dict 全部的方法,除此之外还可以 peekitem(k)来找 key 里面第 k 大的元素,popitem(k)来删除掉第 k 大的元素,弥补了 Python 自带的 heapq 没法 logN 时间复杂度内删除某个元素的缺陷;最近又在刷一些 hard 题目时候突然发现 TreeMap 简直是个神技,很多用别的数据结构写起来非常麻烦的题目,TreeMap 解决起来易如反掌。 2 | -------------------------------------------------------------------------------- /5.Daily Challenge/509. 斐波那契数.js: -------------------------------------------------------------------------------- 1 | // 509. 斐波那契数 2 | var fib = function (N) { 3 | return N === 0 ? 0 : N < 3 ? 1 : fib(N - 1) + fib(N - 2) 4 | } 5 | 6 | // 动态规划 7 | var fib = function (N) { 8 | let dp = new Uint32Array(N + 1) 9 | let i = 1 10 | dp[1] = 1 11 | while (i++ < N) dp[i] = dp[i - 1] + dp[i - 2] 12 | return N ? dp[N] : 0 13 | } 14 | -------------------------------------------------------------------------------- /4.Basic Challenge/9排序_冒泡排序.js: -------------------------------------------------------------------------------- 1 | function bubbleSort(arr) { 2 | for (let i = 1; i < arr.length; i++) { 3 | for (let j = i; j > 0; j--) { 4 | if (arr[j - 1] > arr[j]) { 5 | ;[arr[j - 1], arr[j]] = [arr[j], arr[j - 1]] 6 | } 7 | } 8 | } 9 | return arr 10 | } 11 | let list = [1, 2, 3, 100, 99, -1, 3, 10, -200] 12 | console.log(bubbleSort(list)) 13 | -------------------------------------------------------------------------------- /5.Daily Challenge/1010. 总持续时间可被 60 整除的歌曲.js: -------------------------------------------------------------------------------- 1 | // 1010. 总持续时间可被 60 整除的歌曲 2 | 3 | const numPairsDivisibleBy60 = (time) => { 4 | let res = 0 5 | let seconds = new Array(60).fill(0) 6 | for (let t of time) { 7 | let i = 60 - (t % 60) 8 | res += seconds[i == 60 ? 0 : i] 9 | seconds[t % 60] += 1 10 | } 11 | return res 12 | } 13 | 14 | // 例如 2, i=58 , s[2]++; 15 | -------------------------------------------------------------------------------- /7.Canada Collections 110p/Heap/Priority Queue/1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit (这个题用单调双端队列、TreeMap、双 heap 都可以).ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FleetingEcho/js-algorithm/HEAD/7.Canada Collections 110p/Heap/Priority Queue/1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit (这个题用单调双端队列、TreeMap、双 heap 都可以).ts -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉树集锦/TreeNode.java: -------------------------------------------------------------------------------- 1 | public class TreeNode { 2 | int val; 3 | TreeNode left; 4 | TreeNode right; 5 | 6 | TreeNode() { 7 | } 8 | 9 | TreeNode(int val) { 10 | this.val = val; 11 | } 12 | 13 | TreeNode(int val, TreeNode left, TreeNode right) { 14 | this.val = val; 15 | this.left = left; 16 | this.right = right; 17 | } 18 | } -------------------------------------------------------------------------------- /5.Daily Challenge/92.反转链表 II.js: -------------------------------------------------------------------------------- 1 | // 92.反转链表 II 2 | var sortArrayByParityII = function (A) { 3 | const len = A.length 4 | let j = 1 5 | for (let i = 0; i < len; i += 2) { 6 | // A[i]是奇数 7 | if (A[i] & 1) { 8 | // A[j]是奇数 9 | while (A[j] & 1) { 10 | j += 2 //直到遇到A[j]是偶数 11 | } 12 | ;[A[i], A[j]] = [A[j], A[i]] 13 | } 14 | } 15 | return A 16 | } 17 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第一期/TreeNode.java: -------------------------------------------------------------------------------- 1 | public class TreeNode { 2 | int val; 3 | TreeNode left; 4 | TreeNode right; 5 | 6 | TreeNode() { 7 | } 8 | 9 | TreeNode(int val) { 10 | this.val = val; 11 | } 12 | 13 | TreeNode(int val, TreeNode left, TreeNode right) { 14 | this.val = val; 15 | this.left = left; 16 | this.right = right; 17 | } 18 | } -------------------------------------------------------------------------------- /1.算法框架_labuladong/2.排序算法 合集/1.冒泡排序.js: -------------------------------------------------------------------------------- 1 | 2 | function bubbleSort(arr){ 3 | for(let i = 1;i < arr.length;i++){ 4 | for(let j = i;j > 0;j--){ 5 | if(arr[j-1]>arr[j]){ 6 | [arr[j-1],arr[j]]=[arr[j],arr[j-1]]; 7 | } 8 | } 9 | } 10 | return arr; 11 | } 12 | let list =[1,2,3,100,99,-1,3,10,-200]; 13 | console.log(bubbleSort(list)); 14 | 15 | -------------------------------------------------------------------------------- /5.Daily Challenge/714. 买卖股票的最佳时机含手续费.js: -------------------------------------------------------------------------------- 1 | // 714. 买卖股票的最佳时机含手续费 2 | function maxProfit(prices, fee) { 3 | let n = prices.length 4 | let dp_i_0 = 0, 5 | dp_i_1 = Number.MIN_SAFE_INTEGER 6 | for (let i = 0; i < n; i++) { 7 | let temp = dp_i_0 8 | dp_i_0 = Math.max(dp_i_0, dp_i_1 + prices[i]) 9 | dp_i_1 = Math.max(dp_i_1, temp - prices[i] - fee) 10 | } 11 | return dp_i_0 12 | } 13 | -------------------------------------------------------------------------------- /5.Daily Challenge/976. 三角形的最大周长.js: -------------------------------------------------------------------------------- 1 | // 976. 三角形的最大周长 2 | // 先排序,先取最大三个数,若较小两数和大于第三数,那么可以组成三角形, 3 | // 否则大的数过大,去掉,取剩下的数中最大的,重复此过程 4 | function largestPerimeter(A) { 5 | A.sort((a, b) => b - a) 6 | let max = 0 7 | for (let i = 0; i + 2 <= A.length; i++) { 8 | if (A[i + 1] + A[i + 2] > A[i]) { 9 | max = Math.max(max, A[i] + A[i + 1] + A[i + 2]) 10 | } 11 | } 12 | return max 13 | } 14 | -------------------------------------------------------------------------------- /5.Daily Challenge/452. 用最少数量的箭引爆气球.js: -------------------------------------------------------------------------------- 1 | // 452. 用最少数量的箭引爆气球 2 | function findMinArrowShots(arr) { 3 | if (arr.length == 0) return 0 4 | arr.sort((a, b) => a[1] - b[1]) 5 | let end = arr[0][1] 6 | let count = 1 7 | for (let interval of arr) { 8 | let start = interval[0] 9 | if (start > end) { 10 | count++ 11 | // 下一个 12 | end = interval[1] 13 | } 14 | } 15 | return count 16 | } 17 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/待完成/58.最后一个单词的长度.py: -------------------------------------------------------------------------------- 1 | class Solution: 2 | def lengthOfLastWord(self, s: str) -> int: 3 | n = len(s) 4 | ans = 0 5 | # 倒序遍历 6 | for i in range(n - 1, -1, -1): 7 | if s[i] != " ": 8 | ans += 1 9 | else: 10 | if ans: 11 | return ans 12 | return ans 13 | -------------------------------------------------------------------------------- /5.Daily Challenge/766.托普利茨矩阵.js: -------------------------------------------------------------------------------- 1 | // 766.托普利茨矩阵 2 | 3 | // 除了左下角和右上角不需要遍历,其他点开始遍历 4 | 5 | const isToeplitzMatrix = function (matrix) { 6 | const r = matrix.length 7 | const c = matrix[0].length 8 | 9 | for (let i = 0; i < r - 1; i++) { 10 | for (let j = 0; j < c - 1; j++) { 11 | if (matrix[i][j] != matrix[i + 1][j + 1]) { 12 | return false 13 | } 14 | } 15 | } 16 | return true 17 | } 18 | -------------------------------------------------------------------------------- /5.Daily Challenge/888. 公平的糖果棒交换.js: -------------------------------------------------------------------------------- 1 | //888. 公平的糖果棒交换 2 | 3 | function fairCandySwap(A, B) { 4 | let sumA = A.reduce((prev, cur) => prev + cur, 0) 5 | let sumB = B.reduce((prev, cur) => prev + cur, 0) 6 | let target = (sumA + sumB) / 2 7 | let set = new Set(B) 8 | for (let a of A) { 9 | let b = target - (sumA - a) 10 | if (set.has(b)) { 11 | return [a, b] 12 | } 13 | } 14 | return [] 15 | } 16 | -------------------------------------------------------------------------------- /5.Daily Challenge/563. 二叉树的坡度.js: -------------------------------------------------------------------------------- 1 | // 563. 二叉树的坡度 2 | var findTilt = function (root) { 3 | let sum = 0 4 | const helper = (root) => { 5 | if (!root) { 6 | return 0 7 | } 8 | let leftVal = helper(root.left) 9 | let rightVal = helper(root.right) 10 | // 到最底层的点了; 11 | sum += Math.abs(leftVal - rightVal) 12 | return leftVal + rightVal + root.val 13 | } 14 | helper(root) 15 | return sum 16 | } 17 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/11旋转数组的最小数字.js: -------------------------------------------------------------------------------- 1 | // 11旋转数组的最小数字 2 | let temp = [3, 4, 5, 1, 2] 3 | 4 | const minArray = (arr) => { 5 | const min = Math.min(...arr) 6 | let arr1 = arr 7 | arr1.every((item, index, self) => { 8 | if (arr1[0] === min) return false 9 | if (arr1[0] > min) { 10 | arr1.push(arr1.shift()) 11 | return true 12 | } 13 | }) 14 | return arr1[0] 15 | } 16 | 17 | console.log(minArray(temp)) 18 | -------------------------------------------------------------------------------- /4.Basic Challenge/11排序_插入排序.js: -------------------------------------------------------------------------------- 1 | function insertSort(arr) { 2 | let len = arr.length 3 | if (!Array.isArray(arr) || len <= 1) return 4 | for (let i = 1; i < len; i++) { 5 | let j = i - 1 6 | // 之前的值大? 7 | if (arr[j] > arr[i]) { 8 | let temp = arr[i] 9 | while (j >= 0 && temp < arr[j]) { 10 | arr[j + 1] = arr[j] 11 | j-- 12 | } 13 | arr[j + 1] = temp 14 | } 15 | } 16 | return arr 17 | } 18 | -------------------------------------------------------------------------------- /5.Daily Challenge/633. 平方数之和.js: -------------------------------------------------------------------------------- 1 | // 633. 平方数之和 --双指针 2 | // 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。 3 | var judgeSquareSum = function (c) { 4 | let left = 0 5 | let right = Math.floor(c ** 0.5) 6 | while (left <= right) { 7 | let sum = left ** 2 + right ** 2 8 | if (sum == c) return true 9 | // 如果平方和大于c,则将右指针减一,反之将左指针加一 10 | if (sum > c) right-- 11 | else left++ 12 | } 13 | return false 14 | } 15 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/18.未分类题目/83.删除排序链表中的重复元素.js: -------------------------------------------------------------------------------- 1 | // ! 有序链表去重 2 | 3 | function deleteDuplicates(head) { 4 | if (head == null) return null; 5 | let slow = head, fast = head; 6 | while (fast != null) { 7 | if (fast.val != slow.val) { 8 | slow.next = fast; 9 | slow = slow.next; 10 | } 11 | fast = fast.next; 12 | } 13 | // 断开与后面重复元素的连接 14 | slow.next = null; 15 | return head; 16 | } -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/67. 正则_把字符串转换成整数.js: -------------------------------------------------------------------------------- 1 | // 67. 正则_把字符串转换成整数 2 | var strToInt = function (str) { 3 | let res = str.match(/^\s*[+-]?\d+/) 4 | if (!res) return 0 5 | // 符号部分:[+-], \s空格开头 6 | res = str.match(/^\s*[+-]?\d+/)[0].trim() 7 | if (res >= Math.pow(2, 31)) { 8 | return Math.pow(2, 31) - 1 9 | } else if (res <= Math.pow(-2, 31)) { 10 | return Math.pow(-2, 31) 11 | } else { 12 | return res 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/2.排序算法 合集/3.插入排序.js: -------------------------------------------------------------------------------- 1 | function insertSort(arr) { 2 | let len = arr.length 3 | if (!Array.isArray(arr) || len <= 1) return 4 | for (let i = 1; i < len; i++) { 5 | let j = i - 1 6 | // 之前的值大? 7 | if (arr[j] > arr[i]) { 8 | let temp = arr[i] 9 | while (j >= 0 && temp < arr[j]) { 10 | arr[j + 1] = arr[j] 11 | j-- 12 | } 13 | arr[j + 1] = temp 14 | } 15 | } 16 | return arr 17 | } 18 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第二期/在 BST 中搜索一个数.java: -------------------------------------------------------------------------------- 1 | public class Solution { 2 | boolean isInBST(TreeNode root, int target) { 3 | if (root == null) 4 | return false; 5 | if (root.val == target) 6 | return true; 7 | if (root.val < target) 8 | return isInBST(root.right, target); 9 | if (root.val > target) 10 | return isInBST(root.left, target); 11 | // root 该做的事做完了,顺带把框架也完成了,妙 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/17打印从1到最大的n位数.js: -------------------------------------------------------------------------------- 1 | // 17打印从1到最大的n位数 2 | /* 3 | 4 | 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3, 5 | 则打印出 1、2、3 一直到最大的 3 位数 999。 6 | */ 7 | var printNumbers = function (n) { 8 | let arr = [], 9 | max = '' 10 | while (n > 0) { 11 | max += '9' 12 | n-- 13 | } 14 | maxVal = Number(max) 15 | for (let i = 1; i <= maxVal; i++) { 16 | arr.push(i) 17 | } 18 | return arr 19 | } 20 | console.log(printNumbers(2)) 21 | -------------------------------------------------------------------------------- /5.Daily Challenge/978. 最长湍流子数组.js: -------------------------------------------------------------------------------- 1 | // 978. 最长湍流子数组 2 | // 滑动窗口 3 | const maxTurbulenceSize = function (arr) { 4 | let pre = '=' 5 | let i = 0 6 | let res = 1 7 | for (let j = 1; j < arr.length; j++) { 8 | let cur = arr[j - 1] === arr[j] ? '=' : arr[j - 1] > arr[j] ? '>' : '<' 9 | if (cur === pre) i = j - 1 10 | if (cur === '=') i = j 11 | res = Math.max(res, j - i + 1) 12 | pre = cur 13 | } 14 | return res 15 | } 16 | -------------------------------------------------------------------------------- /4.Basic Challenge/17贪心算法_人民币支付.js: -------------------------------------------------------------------------------- 1 | //coins : 面值 2 | //amount: 总价 3 | function minCoinChange(coins, amount){ 4 | let change = [], total = 0; 5 | for(let i = coins.length; i >= 0; i--){ 6 | let coin = coins[i] 7 | while(total + coin <= amount){ 8 | change.push(coin); 9 | total += coin 10 | } 11 | } 12 | return change; 13 | } 14 | 15 | //调用 16 | console.log(minCoinChange([1,2,5,10,20,50,100],628)) -------------------------------------------------------------------------------- /5.Daily Challenge/278. 第一个错误的版本.ts: -------------------------------------------------------------------------------- 1 | type _version = (a: number) => boolean 2 | const solution = (isBadVersion: _version) => { 3 | return (n: number) => { 4 | let low = 0, 5 | high = n, 6 | res = n 7 | while (low <= high) { 8 | const mid = (low + high) >>> 1 9 | if (isBadVersion(mid)) { 10 | res = mid 11 | high = mid - 1 12 | } else { 13 | low = mid + 1 14 | } 15 | } 16 | return res 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/待完成/71.简化路径.py: -------------------------------------------------------------------------------- 1 | class Solution: 2 | def simplifyPath(self, path: str) -> str: 3 | names = path.split("/") 4 | stack = list() 5 | for name in names: 6 | if name == "..": 7 | if stack: 8 | stack.pop() 9 | elif name and name != ".": 10 | stack.append(name) 11 | return "/" + "/".join(stack) 12 | -------------------------------------------------------------------------------- /5.Daily Challenge/204.计算质数.js: -------------------------------------------------------------------------------- 1 | // 质数,从2开始,所有是2倍数的全部都不是 2 | // 从3开始,所有是3倍数的全都不是 3 | // ..... 4 | // 204.计算质数 5 | const countPrimes = (n) => { 6 | let num = 0 7 | let map = new Array(n).fill(true) //假设全是质数 8 | for (let i = 2; i < n; i++) { 9 | if (map[i] === true) { 10 | num++ 11 | for (let j = i + i; j < n; j += i) { 12 | //比如2, 2的倍数就都是false了,从小到大 13 | map[j] = false 14 | } 15 | } 16 | } 17 | return num 18 | } 19 | -------------------------------------------------------------------------------- /5.Daily Challenge/268. Missing Number.js: -------------------------------------------------------------------------------- 1 | var missingNumber = function(nums) { 2 | nums=nums.sort((a,b)=>a-b) ; 3 | console.log(nums); 4 | let len=nums.length; 5 | let pointer=0; 6 | for(let i=0;i{ 2 | //创建数组 数字和字母 3 | var arr = ["a","b","c","d","e","f","g","A","B","C","D","E","F","G","1","2","3","4","5","6"]; 4 | var code = ""; 5 | 6 | //随机生成数字,从数组当中取len元素 7 | for(var i = 0; i < len; i++){ 8 | //生成随机下标 [0,1] 9 | var index = parseInt(Math.random() * arr.length); 10 | code += arr[index] 11 | } 12 | return code; 13 | } 14 | //调用 15 | console.log(createCode(4)) -------------------------------------------------------------------------------- /5.Daily Challenge/118.杨辉三角.js: -------------------------------------------------------------------------------- 1 | //118. 杨辉三角 2 | // i>>>1 就是除2 3 | const generate = function (numRows) { 4 | let r = new Array(numRows) 5 | for (let i = 0; i < numRows; i++) { 6 | r[i] = new Array(i + 1).fill(1) 7 | for (let j = 1; j <= i / 2; j++) { 8 | r[i][j] = r[i][i - j] = r[i - 1][j - 1] + r[i - 1][j] 9 | } 10 | } 11 | return r 12 | } 13 | console.log(9 >>> 1) 14 | console.log(9 >>> 2) 15 | console.log(8 >>> 1) 16 | console.log(9 >>> 0) 17 | -------------------------------------------------------------------------------- /5.Daily Challenge/144. 二叉树的前序遍历.js: -------------------------------------------------------------------------------- 1 | // 144. 二叉树的前序遍历 2 | /* 3 | 输入: [1,null,2,3] 4 | 1 5 | \ 6 | 2 7 | / 8 | 3 9 | 10 | 输出: [1,2,3] 11 | 12 | */ 13 | var preorderTraversal = function (root) { 14 | if (!root) return [] 15 | const res = [] 16 | const helper = (root) => { 17 | if (!root) return 18 | res.push(root.val) 19 | helper(root.left) 20 | helper(root.right) 21 | return res 22 | } 23 | return helper(root) 24 | } 25 | -------------------------------------------------------------------------------- /5.Daily Challenge/941. 有效的山脉数组.js: -------------------------------------------------------------------------------- 1 | // 941. 有效的山脉数组 2 | const validMountainArray = (A) => { 3 | const n = A.length 4 | let i = 0 5 | let j = n - 1 6 | while (i + 1 < n && A[i] < A[i + 1]) { 7 | i++ 8 | } 9 | while (j - 1 >= 0 && A[j - 1] > A[j]) { 10 | j-- 11 | } 12 | if (i != 0 && i == j && j != n - 1) { 13 | return true 14 | } 15 | return false 16 | } 17 | 18 | const a = [0, 1, 2, 2, 5, 2, 1, 0] 19 | console.log(validMountainArray(a)) 20 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/链表/83. Remove Duplicates from Sorted List.py: -------------------------------------------------------------------------------- 1 | class Solution(object): 2 | def deleteDuplicates(self, head): 3 | if not head: 4 | return None 5 | prev, cur = head, head.next 6 | while cur: 7 | if cur.val == prev.val: 8 | prev.next = cur.next 9 | else: 10 | prev = cur 11 | cur = cur.next 12 | return head 13 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", 4 | "module": "commonjs", 5 | "allowJs": true, 6 | "outDir": "./dist", 7 | "lib": ["ES2020", "dom", "dom.Iterable", "ES2016"], 8 | "rootDir": "./src", 9 | "strict": true, 10 | "strictNullChecks": true, 11 | "noFallthroughCasesInSwitch": true, 12 | "noImplicitThis": false, 13 | "moduleResolution": "Node", 14 | "forceConsistentCasingInFileNames": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第一期/230寻找第 K 小的元素.ts: -------------------------------------------------------------------------------- 1 | namespace LeetCode230_1 { 2 | function kthSmallest(root: TreeNode, k: number) { 3 | let res = 0 4 | let rank = 0 5 | const traverse = (root: TreeNode, k: number) => { 6 | if (!root) return 7 | traverse(root.left, k) 8 | rank++ 9 | if (k == rank) { 10 | res = root.val 11 | return 12 | } 13 | traverse(root.right, k) 14 | } 15 | traverse(root, k) 16 | return res 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第二期/在 BST 中插入一个数.java: -------------------------------------------------------------------------------- 1 | public class Solution { 2 | TreeNode insertIntoBST(TreeNode root, int val) { 3 | // 找到空位置插入新节点 4 | if (root == null) 5 | return new TreeNode(val); 6 | // if (root.val == val) 7 | // BST 中一般不会插入已存在元素 8 | if (root.val < val) 9 | root.right = insertIntoBST(root.right, val); 10 | if (root.val > val) 11 | root.left = insertIntoBST(root.left, val); 12 | return root; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /5.Daily Challenge/865. 具有所有最深节点的最小子树.js: -------------------------------------------------------------------------------- 1 | // 865. 具有所有最深节点的最小子树 2 | function depth(root) { 3 | if (root == null) return 0 4 | return Math.max(depth(root.left), depth(root.right)) + 1 5 | } 6 | function subtreeWithAllDeepest(root) { 7 | if (root == null) return root 8 | let dl = depth(root.left) 9 | let dr = depth(root.right) 10 | if (dl == dr) return root 11 | if (dl > dr) return subtreeWithAllDeepest(root.left) 12 | return subtreeWithAllDeepest(root.right) 13 | } 14 | -------------------------------------------------------------------------------- /8.Huahua-leetcode/1.Tree/144. Binary Tree Preorder Traversal.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | List arr; 3 | 4 | public List preorderTraversal(TreeNode root) { 5 | arr = new ArrayList(); 6 | traverse(root); 7 | return arr; 8 | } 9 | 10 | public void traverse(TreeNode root) { 11 | if (root == null) { 12 | return; 13 | } 14 | arr.add(root.val); 15 | traverse(root.left); 16 | traverse(root.right); 17 | } 18 | } -------------------------------------------------------------------------------- /8.Huahua-leetcode/1.Tree/145. Binary Tree Postorder Traversal.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | List arr; 3 | 4 | public List postorderTraversal(TreeNode root) { 5 | arr = new ArrayList(); 6 | traverse(root); 7 | return arr; 8 | } 9 | 10 | public void traverse(TreeNode root) { 11 | if (root == null) { 12 | return; 13 | } 14 | traverse(root.left); 15 | traverse(root.right); 16 | arr.add(root.val); 17 | } 18 | } -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第一期/230寻找第 K 小的元素.java: -------------------------------------------------------------------------------- 1 | 2 | class Solution { 3 | public int kthSmallest(TreeNode root, int k) { 4 | traverse(root, k); 5 | return res; 6 | } 7 | 8 | int res = 0; 9 | int rank = 0; 10 | 11 | void traverse(TreeNode root, int k) { 12 | if (root == null) { 13 | return; 14 | } 15 | traverse(root.left, k); 16 | rank++; 17 | if (k == rank) { 18 | res = root.val; 19 | return; 20 | } 21 | traverse(root.right, k); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /2.剑指Offer/DFS_深度遍历_√/55 - I. 二叉树的深度.js: -------------------------------------------------------------------------------- 1 | // 55 - I. 二叉树的深度 2 | /* 3 | 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点 4 | (含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 5 | 6 | 例如: 7 | 8 | 给定二叉树 [3,9,20,null,null,15,7], 9 | 10 | 3 11 | / \ 12 | 9 20 13 | / \7离开济南的你 14 | 15 7 15 | 返回它的最大深度 3 16 | */ 17 | // ! 树的深度遍历 18 | 19 | var maxDepth = function (root) { 20 | if (root == null) { 21 | return 0 22 | } 23 | return Math.max(maxDepth(root.left) + 1, maxDepth(root.right) + 1) 24 | } 25 | -------------------------------------------------------------------------------- /8.Huahua-leetcode/1.Tree/94. Binary Tree Inorder Traversal Problem.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | List arr; 3 | 4 | public List inorderTraversal(TreeNode root) { 5 | arr = new ArrayList(); 6 | traverse(root); 7 | return arr; 8 | } 9 | 10 | public void traverse(TreeNode root) { 11 | if (root == null) { 12 | return; 13 | } 14 | traverse(root.left); 15 | arr.add(root.val); 16 | traverse(root.right); 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /5.Daily Challenge/337. 打家劫舍 III.js: -------------------------------------------------------------------------------- 1 | // 337. 打家劫舍 III 2 | function rob(root) { 3 | const dp = (root) => { 4 | if (root == null) return [0, 0] 5 | let left = dp(root.left) 6 | let right = dp(root.right) 7 | // 抢,下两家就不能抢了 8 | let rob = root.val + left[0] + right[0] 9 | // 不抢,下家可抢可不抢,取决于收益大小 10 | let not_rob = Math.max(left[0], left[1]) + Math.max(right[0], right[1]) 11 | 12 | return [not_rob, rob] 13 | } 14 | let res = dp(root) 15 | return Math.max(res[0], res[1]) 16 | } 17 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/3.广度优先搜索 BFS 33/index.md: -------------------------------------------------------------------------------- 1 | 宽度优先搜索 2 | 3 | 基本问题: 4 | (1)如果复杂程度类似, 面试中尽量优先使用 BFS 5 | (2)BFS 主要几种场景: 层级遍历,拓扑排序,图上搜索(包括二叉树,矩阵) 6 | (3)Queue 的使用技巧,BFS 的终止条件? 7 | (4)什么时候使用分层?什么时候不需要?实现的时候的区别在哪里? 8 | (5)拓扑排序的概念?如何判断是否存在拓扑排序?是否存在唯一的拓扑排序?找到所有拓扑排序? 9 | (6)什么时候需要使用 set 记录访问过的节点?(为什么二叉树上的 BFS 往往不需要 set?)什么时候需要 map 记录到达过的节点距离? 10 | (7)如何在矩阵中遍历下一步的所有节点?如果每次可能走不止一步怎么办(Maze II)? 11 | (8)为什么 BFS 解决的基本都是简单图(边长为 1)问题?如果边长不为 1,该怎么办? 12 | (9)BFS 的时空复杂度估算? 13 | (10)如何使用双向 BFS 进行优化? 14 | -------------------------------------------------------------------------------- /2.剑指Offer/链表_√/18删除链表的节点.js: -------------------------------------------------------------------------------- 1 | // 18删除链表的节点 2 | /* 3 | 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 4 | 返回删除后的链表的所有节点值。 5 | */ 6 | // arr数组,val 7 | // [4,5,1,9] 8 | // 使用哨兵节点,循环找到节点,进行删除 9 | 10 | var deleteNode = function (head, val) { 11 | let pre = new ListNode(-1) // 哨兵节点 12 | pre.next = head 13 | 14 | let node = pre 15 | while (node.next) { 16 | if (node.next.val === val) { 17 | node.next = node.next.next 18 | break 19 | } 20 | node = node.next 21 | } 22 | return pre.next 23 | } 24 | -------------------------------------------------------------------------------- /4.Basic Challenge/1_数组拆分.js: -------------------------------------------------------------------------------- 1 | //数组排序 2 | //最大总和 3 | var arrayPairSum = function(num){ 4 | let sum = 0; 5 | //数组排序 6 | num.sort((a,b) => {return b - a;}); 7 | for(let i = 1; i < num.length; i = i + 2){ 8 | sum += num[i] 9 | } 10 | return sum 11 | } 12 | 13 | //调用 14 | let arr = [1,4,3,-100,-1,3,-10,200,2,5,6,7,8,9] 15 | console.log(arrayPairSum(arr)) //4 16 | 17 | // sort排序 18 | const Sort=(arr)=>{ 19 | return arr.sort((a,b)=>{ return b-a}) 20 | } 21 | console.log(Sort(arr)); 22 | -------------------------------------------------------------------------------- /5.Daily Challenge/1356. 根据数字二进制下 1 的数目排序.js: -------------------------------------------------------------------------------- 1 | // 1356. 根据数字二进制下 1 的数目排序 2 | var sortByBits = function (arr) { 3 | const helper = (number) => { 4 | return number.toString(2).replace(/[^1]/g, '').length 5 | } 6 | console.log(helper(3)) 7 | //题目要求, 如果完全一致,则按照数值大小排序 8 | arr.sort((a, b) => a - b) 9 | arr.sort((a, b) => { 10 | return helper(a) - helper(b) 11 | }) 12 | return arr 13 | } 14 | 15 | const arr = [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1] 16 | console.log(sortByBits(arr)) 17 | -------------------------------------------------------------------------------- /5.Daily Challenge/455. 分发饼干.js: -------------------------------------------------------------------------------- 1 | // 455. 分发饼干 2 | /* 3 | 输入: g = [1,2], s = [1,2,3] 4 | 输出: 2 5 | 解释: 6 | 你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。 7 | 你拥有的饼干数量和尺寸都足以让所有孩子满足。 8 | 所以你应该输出2. 9 | */ 10 | 11 | const findContentChildren = function (g, s) { 12 | let i = 0, 13 | j = 0 14 | g.sort((a, b) => a - b) // 升序 15 | s.sort((a, b) => a - b) // 升序 16 | while (j < s.length) { 17 | if (s[j] >= g[i]) { 18 | if (i === g.length) break 19 | i++ 20 | } 21 | 22 | j++ 23 | } 24 | return i 25 | } 26 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/链表/237. 删除链表中的节点.ts: -------------------------------------------------------------------------------- 1 | namespace Leetcode237 { 2 | function deleteNode(node: ListNode | null): void { 3 | if (node) { 4 | node.val = node.next!.val 5 | node.next = node.next!.next 6 | } 7 | } 8 | 9 | class ListNode { 10 | val: number 11 | next: ListNode | null 12 | constructor(val?: number, next?: ListNode | null) { 13 | this.val = val === undefined ? 0 : val 14 | this.next = next === undefined ? null : next 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/index.md: -------------------------------------------------------------------------------- 1 | 9 | 10 | 从做算法题的角度来看 BST,除了它的定义,还有一个重要的性质:==BST 的中序遍历结果是有序的(升序)。== 11 | 12 | 也就是说,如果输入一棵 BST,以下代码可以将 BST 中每个节点的值升序打印出来: 13 | 14 | void traverse(TreeNode root) { 15 | if (root == null) return; 16 | traverse(root.left); 17 | // 中序遍历代码位置 18 | print(root.val); 19 | traverse(root.right); 20 | } 21 | 那么根据这个性质,我们来做两道算法题。 22 | -------------------------------------------------------------------------------- /2.剑指Offer/DFS_深度遍历_√/54. 二叉搜索树的第 k 大节点.js: -------------------------------------------------------------------------------- 1 | // 54. 二叉搜索树的第 k 大节点 2 | /* 3 | 给定一棵二叉搜索树,请找出其中第k大的节点。 4 | 5 | ! 树的深度遍历 6 | 将中序遍历按照右、中、左遍历即可---即可得到由大到小的数组 7 | 8 | *时间复杂度 O(n),空间复杂度:O(1) 9 | */ 10 | // ! 11 | 12 | var kthLargest = function (root, k) { 13 | let count = 1 14 | let res 15 | const helper = (root) => { 16 | if (!root) return 17 | helper(root.left) 18 | if (count === k) return (res = root.val) 19 | else count++ 20 | helper(root.right) 21 | } 22 | helper(root) 23 | return res 24 | } 25 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/待完成/139. 单词拆分.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | 4 | class Solution: 5 | 6 | def wordBreak(self, s: str, wordDict: List[str]) -> bool: 7 | # 完全背包问题,每个元素可以选多次 8 | n = len(s) 9 | dp = [False] * (n + 1) 10 | dp[0] = True 11 | for i in range(n): 12 | for j in range(i + 1, n + 1): 13 | if dp[i] and s[i:j] in wordDict: 14 | dp[j] = True 15 | return dp[-1] 16 | 17 | 18 | # O(N^2) -------------------------------------------------------------------------------- /5.Daily Challenge/56.合并区间.js: -------------------------------------------------------------------------------- 1 | // intervals 形如 [[1,3],[2,6]...] 2 | // 56.合并区间 3 | function merge(intervals) { 4 | if (intervals.length == 0) return [] 5 | intervals.sort((a, b) => a[0] - b[0]) 6 | let res = [] 7 | res.push(intervals[0]) 8 | for (let i = 1; i < intervals.length; i++) { 9 | curr = intervals[i] 10 | last = res[res.length - 1] 11 | if (curr[0] <= last[1]) { 12 | last[1] = Math.max(last[1], curr[1]) 13 | } else { 14 | res.push(Array.from(curr)) 15 | } 16 | } 17 | return res 18 | } 19 | -------------------------------------------------------------------------------- /4.Basic Challenge/21_单词是否是回文.js: -------------------------------------------------------------------------------- 1 | //步骤 2 | // 回文----正反都一样 3 | //1.for遍历当前字符串 4 | //2.判断前后比较是否相等 5 | function palindRome(str){ 6 | var len = str.length; 7 | let res=true 8 | //1.for遍历当前字符串 9 | for(var i = 0; i < len; i++){ 10 | //abcba 11 | //2.判断前后比较是否相等 12 | if(str.charAt(i) === str.charAt(len-1-i)){ 13 | continue 14 | }else{ 15 | res=false; 16 | break; 17 | } 18 | } 19 | return res 20 | } 21 | 22 | //调用 23 | let str = "abccccc" 24 | console.log(palindRome(str)) -------------------------------------------------------------------------------- /5.Daily Challenge/867. 转置矩阵.js: -------------------------------------------------------------------------------- 1 | // 867. 转置矩阵 2 | /* 3 | 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 4 | 输出:[[1,4,7],[2,5,8],[3,6,9]] 5 | 给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。 6 | 矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 7 | */ 8 | const transpose = function (matrix) { 9 | let l = matrix.length, 10 | w = matrix[0].length 11 | let arr = new Array(w).fill(0).map(() => new Array(l).fill(0)) 12 | for (let i = 0; i < l; i++) { 13 | for (let j = 0; j < w; j++) { 14 | arr[j][i] = matrix[i][j] 15 | } 16 | } 17 | return arr 18 | } 19 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉树集锦/104.二叉树最大深度.java: -------------------------------------------------------------------------------- 1 | 2 | class Solution { 3 | private int res; 4 | private int depth; 5 | 6 | public int maxDepth(TreeNode root) { 7 | if (root == null) { 8 | return 0; 9 | } 10 | traverse(root); 11 | return res; 12 | } 13 | 14 | private void traverse(TreeNode root) { 15 | if (root == null) { 16 | res = Math.max(res, depth); 17 | return; 18 | } 19 | depth++; 20 | traverse(root.left); 21 | traverse(root.right); 22 | depth--; 23 | } 24 | } -------------------------------------------------------------------------------- /2.剑指Offer/二叉树_√/68 - II. 二叉树的最近公共祖先.js: -------------------------------------------------------------------------------- 1 | // 68 - II. 二叉树的最近公共祖先 2 | const lowestCommonAncestor = (root, p, q) => { 3 | if (root == null || root == p || root == q) { 4 | return root 5 | } 6 | left = lowestCommonAncestor(root.left, p, q) 7 | right = lowestCommonAncestor(root.right, p, q) 8 | if (!left && !right) { 9 | return null 10 | } else if (!left && right) { 11 | return right 12 | } else if (left && !right) { 13 | return left 14 | } else { 15 | // 左右均不为空,则root就是left,right的root 16 | return root 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /4.Basic Challenge/25url加密解密.js: -------------------------------------------------------------------------------- 1 | // btoa加密和atob解密只能用在html中,node不支持 2 | 3 | 4 | // new Buffer() 是node.js中的对象 5 | const encode = function(longUrl) { 6 | return 'http://tinyurl.com/' + new Buffer.from(longUrl).toString('base64') 7 | }; 8 | 9 | const decode = function(shortUrl) { 10 | return new Buffer.from((shortUrl.split('http://tinyurl.com/')[1]), 'base64').toString() 11 | }; 12 | 13 | const url='https://leetcode.com/problems/design-tinyurl'; 14 | console.log(`加密后${encode(url)}`); 15 | console.log(`解密后${decode(encode(url))}`); -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/61. 扑克牌中的顺子.js: -------------------------------------------------------------------------------- 1 | // 61. 扑克牌中的顺子 2 | // 从扑克牌中随机抽5张牌,判断是不是一个顺子, 3 | // 即这5张牌是不是连续的。2~10为数字本身, 4 | // A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。 5 | // A 不能视为 14。 6 | 7 | // ! 利用Set的去重 [1,2,3,0,0], [1,3,9,0,0] 8 | const isStraight = (nums) => { 9 | let set = new Set() 10 | let max = 1, 11 | min = 14 12 | for (let n of nums) { 13 | if (n !== 0) { 14 | if (set.has(n)) return false 15 | set.add(n) 16 | max = Math.max(max, n) 17 | min = Math.min(min, n) 18 | } 19 | } 20 | return max - min < 5 21 | } 22 | -------------------------------------------------------------------------------- /5.Daily Challenge/123. 买卖股票的最佳时机 III.js: -------------------------------------------------------------------------------- 1 | // 123. 买卖股票的最佳时机 III 2 | // 交易N次有(1)和无(0)股票的情况 3 | function maxProfit(prices) { 4 | let dp_i10 = 0, 5 | dp_i11 = Number.MIN_SAFE_INTEGER 6 | let dp_i20 = 0, 7 | dp_i21 = Number.MIN_SAFE_INTEGER 8 | for (let price of prices) { 9 | dp_i20 = Math.max(dp_i20, dp_i21 + price) //无 10 | dp_i21 = Math.max(dp_i21, dp_i10 - price) //有,先算第二次交易,否则dp_i10会影响次数,再加1 11 | dp_i10 = Math.max(dp_i10, dp_i11 + price) //无 12 | dp_i11 = Math.max(dp_i11, -price) //有 13 | } 14 | return dp_i20 15 | } 16 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉树集锦/124求二叉树中的最大路径和.js: -------------------------------------------------------------------------------- 1 | const maxPathSum = (root) => { 2 | let maxSum = Number.MIN_SAFE_INTEGER; // 最大路径和 3 | const dfs = (root) => { 4 | if (root == null) return 0; // 遍历到null节点,返回0; 5 | 6 | const left = Math.max(0, dfs(root.left)); // 左子树提供的最大收益 7 | const right = Math.max(0, dfs(root.right)); // 右子树提供的最大收益 8 | maxSum=Math.max(maxSum,left+right+root.val); 9 | 10 | return Math.max(left,right)+root.val //返回节点贡献的最大值 11 | }; 12 | 13 | dfs(root); // 递归的入口 14 | return maxSum; 15 | }; -------------------------------------------------------------------------------- /2.剑指Offer/链表_√/25合并两个排序的链表.js: -------------------------------------------------------------------------------- 1 | // 25合并两个排序的链表 2 | /* 3 | 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 4 | 5 | 示例1: 6 | 输入:1->2->4, 2->3->4 7 | 输出:1->2->2->3->4->4 8 | 9 | 10 | 1->2->5 0->3->4 11 | */ 12 | /* 13 | ! 递归 14 | */ 15 | // 会每次递归先将值return出来 16 | var mergeTwoLists = function (l1, l2) { 17 | if (l1 === null) return l2 18 | if (l2 === null) return l1 19 | if (l1.val < l2.val) { 20 | l1.next = mergeTwoLists(l1.next, l2) 21 | return l1 22 | } else { 23 | l2.next = mergeTwoLists(l1, l2.next) 24 | return l2 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /3.Data Structure/Node中Buffer对象.js: -------------------------------------------------------------------------------- 1 | // Buffer对象是Node处理二进制数据的一个接口。 2 | // 它是Node原生提供的全局对象,可以直接使用,不需要require('buffer')。 3 | 4 | // new Buffer() 是node.js中的对象 5 | /* 6 | Blob: 前端的一个专门用于支持文件操作的二进制对象 7 | 8 | ArrayBuffer:前端的一个通用的二进制缓冲区,类似数组,但在API和特性上却有诸多不同 9 | 10 | Buffer:Node.js提供的一个二进制缓冲区,常用来处理I/O操作 11 | */ 12 | // const encode1=new Buffer.from("http://tinyurl.com/").toString('base64') //aHR0cDovL3Rpbnl1cmwuY29tLw== 13 | // const encode1=new Buffer.from("http://tinyurl.com/","base64").toString() // ��i��b�+���& 乱码 14 | // console.log(encode1); -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/2.多指针 75/index.md: -------------------------------------------------------------------------------- 1 | # 多指针问题 2 | 3 | 基本问题: 4 | (1)多指针是一个非常广泛的概念,并不是一个固定的算法。但基本上是通过一些变量的控制与循环把问题的复杂度控制在一两层for循环之内。可以用在数组、链表、区间、滑动窗口、流、回文串、和差问题等多个场景。(前项和其实并不完全是指针问题,但也归并在这里)。 5 | (2)Quick Sort和Merge Sort的基本原理与实现,排序的稳定性问题 6 | (3)Quick Select的实现与复杂度 7 | (4)同向指针与相向指针的使用场景 8 | (5)不同场景下循环终止条件? 9 | (6)两数之和,之差,特定条件下(大小于某值等)的计数问题 10 | (7)三数或三数以上之和的通用写法(两数之和+搜索) 11 | (8)数组有没有排序?是否需要排序? 12 | (9)数组有没有去重?是否需要去重? 13 | (10)离线数据(内存中,有限长)还是在线数据(无法放入内存,长度未知)? 14 | (11)链表操作中dummy node与previous node的使用技巧 15 | (12)链表的中点,判断是否有环,寻找环的交叉点 16 | 17 | -------------------------------------------------------------------------------- /Algorithm-JS.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/1.必备算法框架/3_DFS与BFS使用范围.js: -------------------------------------------------------------------------------- 1 | /* 2 | > BFS 适用于最短类问题(最小,最少)。会用到队列queue[], 同时必须用Set做备忘录,防止重复。 3 | > 每一步就是一层搜索,集体行动 4 | > BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止。 5 | 6 | >双向BFS 使用时必须知道终点是什么。 7 | > 从起点和终点同时开始扩散,当两边有交集的时候停止。 8 | 9 | > DFS 适用搜索全部的解,或者必须要走到最深处的问题。 10 | > 会优先访问没有访问过的点,属于 单打独斗 11 | > 不需要保存搜索过程中的状态,空间复杂度低。 12 | > 递归深度 N 最好不要过大.像二维数组的题目,N小于20的,适用DFS。 13 | > 而一般 N<= 200,N<=1000这种,一定不能用DFS去做。会爆栈 14 | 15 | 16 | 17 | >特例 如果遇到二维数组,则DFS 和 BFS 均可, 只要 N 不是特别大。 18 | 19 | */ -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/58 - II. 左旋转字符串.js: -------------------------------------------------------------------------------- 1 | // 58 - II. 左旋转字符串 2 | /* 3 | 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。 4 | 请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2, 5 | 该函数将返回左旋转两位得到的结果"cdefgab"。 6 | 7 | 输入: s = "abcdefg", k = 2 8 | 输出: "cdefgab" 9 | 10 | */ 11 | const s = 'abcdefg', 12 | k = 2 13 | 14 | var reverseLeftWords = function (s, n) { 15 | let res = '' 16 | for (let i = n; i < s.length; i++) { 17 | res += s[i] 18 | } 19 | for (let i = 0; i < n; i++) { 20 | res += s[i] 21 | } 22 | return res 23 | } 24 | console.log(reverseLeftWords(s, k)) 25 | -------------------------------------------------------------------------------- /5.Daily Challenge/110. 平衡二叉树.js: -------------------------------------------------------------------------------- 1 | /* 2 | 110. 平衡二叉树 3 | 给定一个二叉树,判断它是否是高度平衡的二叉树。 4 | 5 | 本题中,一棵高度平衡二叉树定义为: 6 | 7 | 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 8 | 9 | */ 10 | 11 | // 自底向上 12 | const isBalanced = function (root) { 13 | return balanced(root) !== -1 14 | } 15 | const balanced = function (node) { 16 | if (!node) return 0 17 | const left = balanced(node.left) 18 | const right = balanced(node.right) 19 | if (left === -1 || right === -1 || Math.abs(left - right) > 1) { 20 | return -1 21 | } 22 | return Math.max(left, right) + 1 23 | } 24 | -------------------------------------------------------------------------------- /5.Daily Challenge/389. 找不同.js: -------------------------------------------------------------------------------- 1 | // 389. 找不同 2 | /* 3 | 输入:s = "abcd", t = "abcde" 4 | 输出:"e" 5 | 解释:'e' 是那个被添加的字母。 6 | 7 | */ 8 | 9 | var findTheDifference = function (s, t) { 10 | const map = new Map() 11 | for (let i = 0; i < s.length; i++) { 12 | const val = map.get(s[i]) 13 | map.set(s[i], val === undefined ? 1 : val + 1) 14 | } 15 | for (let i = 0; i < t.length; i++) { 16 | const val = map.get(t[i]) 17 | if (val === 0 || val === undefined) { 18 | return t[i] 19 | } else { 20 | map.set(t[i], val - 1) 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /5.Daily Challenge/754. 到达终点数字.js: -------------------------------------------------------------------------------- 1 | // 754. 到达终点数字 2 | function reachNumber(target) { 3 | target = Math.abs(target) 4 | let sum = 0 5 | let n = 0 6 | while (sum < target || (sum - target) % 2 != 0) { 7 | sum += n 8 | n++ 9 | } 10 | return n - 1 11 | } 12 | 13 | /* 14 | 思路概述: 15 | 给一个target,不管值是正值还是负值,需要的步数是同样的,所以我们统一考虑为正值,统一取绝对值。 16 | 向右走是加,向左走是减,那我们可以先不停的向右走,那么走的格数就是1+2+3+… 当无法得到给定的target值 17 | 时,代表我们其中是有几步是需要向左走的,那么向左走一步,会导致结果减小2对应的步数。 18 | 比如第二格我们向左,本来是加2,现在是减2,一来一去少了2*2=4格。 19 | 所以我们可以不断累加,直到遇到sum值-target是偶数的情况,当前走的步数就是结果 20 | 21 | */ 22 | -------------------------------------------------------------------------------- /5.Daily Challenge/完全二叉树的节点个数.js: -------------------------------------------------------------------------------- 1 | // 完全二叉树的节点个数 2 | function countNodes(root) { 3 | return root == null ? 0 : countNodes(root.left) + countNodes(root.right) + 1 4 | } 5 | 6 | // BFS 7 | function countNodes(root) { 8 | if (!root) { 9 | return 0 10 | } 11 | let q = [] 12 | let sum = 0 13 | q.push(root) 14 | while (q.length !== 0) { 15 | for (let i = 0; i < q.length; i++) { 16 | let demo = q.shift() 17 | sum++ 18 | if (demo.left) q.push(demo.left) 19 | if (demo.right) q.push(demo.right) 20 | } 21 | } 22 | return sum 23 | } 24 | -------------------------------------------------------------------------------- /4.Basic Challenge/10排序_选择排序.js: -------------------------------------------------------------------------------- 1 | // > 每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。 2 | 3 | function selectSort(arr) { 4 | for (let i = 0; i < arr.length; i++) { 5 | let min = Math.min(...arr.slice(i)) 6 | let index = arr.indexOf(min) 7 | ;[arr[i], arr[index]] = [arr[index], arr[i]] 8 | } 9 | return arr 10 | } 11 | 12 | // const findMin=Math.min.apply(null,arr) 13 | let list = [10, 1, 3, 4, 100, -20, 30, 7] 14 | let list2 = [-11, 200, 20, 30, 10, 2, 3, 4, -10, -200] 15 | // console.log(swapSort(list)) 16 | 17 | console.log(selectSort(list2)) 18 | -------------------------------------------------------------------------------- /4.Basic Challenge/5 求数组min之和.js: -------------------------------------------------------------------------------- 1 | const list=[1,2,3,4,5,6,7,8,1,100]; 2 | // const list=[1,2,3,4]; 3 | let temp=[]; 4 | let temp2=[]; 5 | let num=0 6 | const Min=(arr)=>{ 7 | return arr.sort((a,b)=>{ 8 | return a-b 9 | })[0] 10 | } 11 | // console.log(Min([3,4,1])); 12 | const Sum=(list)=>{ 13 | for(let i=0;i{ 20 | num+=item 21 | }) 22 | return num 23 | } 24 | 25 | console.log(Sum(list)); -------------------------------------------------------------------------------- /5.Daily Challenge/290. 单词规律.js: -------------------------------------------------------------------------------- 1 | // 290. 单词规律 2 | var wordPattern = function (pattern, s) { 3 | const a = s.split(' ') 4 | if (pattern.length !== a.length) return false 5 | const hp = new Map(), 6 | hs = new Map() 7 | for (let i = 0; i < a.length; i++) { 8 | let p = pattern[i], 9 | s = a[i] 10 | if (hp.has(p)) { 11 | if (hp.get(p) !== s) return false 12 | } else { 13 | hp.set(p, s) 14 | } 15 | if (hs.has(s)) { 16 | if (hs.get(s) !== p) return false 17 | } else { 18 | hs.set(s, p) 19 | } 20 | } 21 | return true 22 | } 23 | -------------------------------------------------------------------------------- /5.Daily Challenge/86. 分隔链表.js: -------------------------------------------------------------------------------- 1 | /* 2 | 86. 分隔链表 3 | 给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。 4 | 5 | 你应当保留两个分区中每个节点的初始相对位置。 6 | 7 |   8 | 9 | 示例: 10 | 11 | 输入:head = 1->4->3->2->5->2, x = 3 12 | 输出:1->2->2->4->3->5 13 | 14 | */ 15 | 16 | const partition = function (head, x) { 17 | let pA = (a = new ListNode(0)), 18 | pB = (b = new ListNode(0)) 19 | while (head) { 20 | head.val < x ? (a = a.next = head) : (b = b.next = head) 21 | head = head.next 22 | } 23 | a.next = pB.next 24 | b.next = null 25 | return pA.next 26 | } 27 | -------------------------------------------------------------------------------- /5.Daily Challenge/369. 给单链表加一.js: -------------------------------------------------------------------------------- 1 | // 369. 给单链表加一 2 | // 例如 12399 +1 =12400 3 | function plusOne(head) { 4 | //1.双指针 5 | let fast = head 6 | let slow = new ListNode(0) 7 | slow.next = head 8 | 9 | //2.遍历链表 10 | while (fast != null) { 11 | if (fast.val != 9) { 12 | slow = fast 13 | } 14 | // 等于9则不动 15 | fast = fast.next 16 | } 17 | 18 | //3.末位加1 19 | slow.val += 1 20 | let cur = slow.next 21 | // 慢指针后面全部设为0 22 | while (cur != null) { 23 | cur.val = 0 24 | cur = cur.next 25 | } 26 | return slow.next == head ? slow : head 27 | } 28 | -------------------------------------------------------------------------------- /5.Daily Challenge/1026. 节点与其祖先之间的最大差值.js: -------------------------------------------------------------------------------- 1 | // 1026. 节点与其祖先之间的最大差值 2 | var maxAncestorDiff = function (root) { 3 | // BASE 4 | if (!root) return 0 5 | let res = Number.MIN_SAFE_INTEGER 6 | const dfs = (root, max, min) => { 7 | if (!root) return 8 | max = Math.max(root.val, max) 9 | min = Math.min(root.val, min) 10 | // 到达最深层节点 11 | if (!root.left && !root.right) { 12 | res = Math.max(res, Math.abs(max - min)) 13 | } 14 | dfs(root.left, max, min) 15 | dfs(root.right, max, min) 16 | } 17 | dfs(root, root.val, root.val) 18 | return res 19 | } 20 | -------------------------------------------------------------------------------- /5.Daily Challenge/387. 字符串中的第一个唯一字符.js: -------------------------------------------------------------------------------- 1 | // 387. 字符串中的第一个唯一字符 2 | /* 3 | 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 4 | 5 | s = "leetcode" 6 | 返回 0 7 | 8 | s = "loveleetcode" 9 | 返回 2 10 | */ 11 | 12 | const firstUniqChar = function (s) { 13 | let h = new Map(), 14 | i = 0 15 | while (i < s.length) { 16 | h.set(s[i], h.has(s[i]) ? h.get(s[i]) + 1 : 1) 17 | i++ 18 | } 19 | let res = -1 20 | Array.from(h).some(([key, val], index) => { 21 | if (val === 1) { 22 | res = s.indexOf(key) 23 | return true 24 | } 25 | }) 26 | return res 27 | } 28 | -------------------------------------------------------------------------------- /5.Daily Challenge/746. 使用最小花费爬楼梯.js: -------------------------------------------------------------------------------- 1 | // 746. 使用最小花费爬楼梯 2 | // 动态规划 3 | /* 4 | dp[i]从i出发成本,dp = [cost[0], cost[1]],从0到cost.length,到终点前 5 | 从1步前或2步前出发。(dp[cost.length - 2], dp[cost.length - 1])取小即解 6 | dp[i] = cost[i] + (dp[i - 1], dp[i - 2])取小 7 | */ 8 | var minCostClimbingStairs = function (cost) { 9 | // let dp = new Array(cost.length + 1).fill(0); 10 | let dp = new Uint32Array(cost.length + 1) //JavaScript 类型化数组, 11 | let i = 1 12 | while (i++ < cost.length) dp[i] = Math.min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]) 13 | return dp[i - 1] 14 | } 15 | -------------------------------------------------------------------------------- /5.Daily Challenge/1015. 可被 K 整除的最小整数.js: -------------------------------------------------------------------------------- 1 | // 1015. 可被 K 整除的最小整数 2 | function smallestRepunitDivByK(K) { 3 | let seen = new Array(K).fill(false) 4 | let n = 0 5 | let c = 0 6 | while (!seen[n]) { 7 | seen[n] = true 8 | n = (10 * n + 1) % K 9 | ++c 10 | } 11 | return n == 0 ? c : -1 12 | } 13 | 14 | function smallestRepunitDivByK(K) { 15 | if (K % 2 == 0 || K % 5 == 0) { 16 | return -1 17 | } 18 | let temp = 1 19 | let len = 1 20 | while (temp % K != 0) { 21 | temp = temp % K 22 | temp = temp * 10 + 1 23 | len++ 24 | } 25 | return len 26 | } 27 | -------------------------------------------------------------------------------- /5.Daily Challenge/1081. 不同字符的最小子序列.js: -------------------------------------------------------------------------------- 1 | // 和316 去除重复字母一模一样 2 | // 1081. 不同字符的最小子序列 3 | //! 使用单调栈解决 4 | const smallestSubsequence = function (s) { 5 | let stack = [] 6 | for (let i = 0; i < s.length; i++) { 7 | let char = s[i] 8 | if (stack.indexOf(char) > -1) continue 9 | while ( 10 | stack.length !== 0 && 11 | stack[stack.length - 1] > char && //stack最后一位大于当前字母 12 | s.indexOf(stack[stack.length - 1], i) > i //从s第i位开始查stack最后一位数字,确认还有的话才删除前面的字母 13 | ) { 14 | stack.pop() 15 | } 16 | stack.push(char) 17 | } 18 | return stack.join('') 19 | } 20 | -------------------------------------------------------------------------------- /5.Daily Challenge/117. 填充每个节点的下一个右侧节点指针 II.js: -------------------------------------------------------------------------------- 1 | // 117. 填充每个节点的下一个右侧节点指针 II 2 | var connect = function (root) { 3 | if (!root) return null 4 | let res = root 5 | let queue = [res] 6 | //层序遍历 7 | while (queue.length) { 8 | let len = queue.length 9 | let pre = null 10 | for (let i = 0; i < len; i++) { 11 | let node = queue.shift() 12 | node.left && queue.push(node.left) 13 | node.right && queue.push(node.right) 14 | //记录上一个节点,上一个节点指向当前节点 15 | if (pre) { 16 | pre.next = node 17 | } 18 | pre = node 19 | } 20 | } 21 | return res 22 | } 23 | -------------------------------------------------------------------------------- /4.Basic Challenge/16递归的缺点以及解决方案.js: -------------------------------------------------------------------------------- 1 | /* 2 | !!堆栈溢出 3 | 4 | 1)递归的本质就是重复调用本身的过程,本身是什么? 5 | 2)函数中变量是存储到系统中的栈中的,栈数据结构的特点就是先进后出,后进先出。 6 | 3)递归的过程,函数中的变量一直不断的压栈,由于我们系统栈或虚拟机栈空间是非常小的,当栈压满之后,再压时,就会导致堆栈溢出。 7 | 8 | 9 | 10 | *解决办法1 设置递归深度 11 | 简单的理解就是,如果递归超过我们设置的深度,我们就退出,不再递归下去 12 | depth++; if(depth>1000) throw 'error' 13 | 14 | * 有些递归问题中,存在重复计算问题,比如求斐波那契数列,我们会发现有很多重复递归计算的值,重复计算会导致程序的时间复杂度很高,而且是指数级别的,导致我们的程序效率低下。 15 | 16 | * 解决办法 使用散列表Map进行保存 17 | 我们把已经计算过的值保存起来,每次递归计算之前先检查一下保存的数据有没有该数据。 18 | 如果有,我们拿出来直接用。如果没有,我们计算出来保存起来。一般我们用散列表来保存。 19 | (所谓的散列表就是键值对的形式,如 map ) 20 | 21 | */ -------------------------------------------------------------------------------- /1.算法框架_labuladong/19.高频面试题/20.有效的括号.js: -------------------------------------------------------------------------------- 1 | function isValid(str) { 2 | let left = [] //栈 3 | for (let c of str) { 4 | if (c == '(' || c == '{' || c == '[') left.push(c) 5 | // 字符 c 是右括号 6 | else if (left.length !== 0 && leftOf(c) == left[left.length - 1]) left.pop() 7 | // 和最近的左括号不匹配 8 | else return false 9 | } 10 | // 是否所有的左括号都被匹配了 11 | return left.length === 0 12 | } 13 | 14 | function leftOf(c) { 15 | if (c == '}') return '{' 16 | if (c == ')') return '(' 17 | return '[' 18 | } 19 | 20 | console.log(isValid('{{()[]}}')) 21 | console.log(isValid('{{()[(]}}')) 22 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第一期/530二叉搜索树转为累加树.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | private int sum = 0; 3 | 4 | public TreeNode convertBST(TreeNode root) { 5 | traverse(root); 6 | return root; 7 | } 8 | 9 | public void traverse(TreeNode root) { 10 | if (root == null) { 11 | return; 12 | } 13 | traverse(root.right); 14 | 15 | // root 16 | sum += root.val; 17 | root.val = sum; 18 | traverse(root.left); 19 | } 20 | } 21 | 22 | /* 23 | * 24 | * 这段代码可以从大到小降序打印 BST 节点的值,如果维护一个外部累加变量sum,然后把sum赋值给 BST 中的每一个节点,不就将 BST 25 | * 转化成累加树了吗? 26 | * 27 | */ -------------------------------------------------------------------------------- /5.Daily Challenge/643. 子数组最大平均数 I.js: -------------------------------------------------------------------------------- 1 | /* 2 | 643. 子数组最大平均数 I 3 | 4 | 5 | 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。 6 | 输入:[1,12,-5,-6,50,3], k = 4 7 | 输出:12.75 8 | 解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75 9 | */ 10 | function findMaxAverage(arr, k) { 11 | let len = arr.length 12 | let sum = 0 13 | arr.some((item, index) => { 14 | if (index > k - 1) return true 15 | sum += item 16 | }) 17 | let res = sum 18 | for (let i = 1; i + k - 1 < len; i++) { 19 | //窗口长度不变, 加右减左 20 | sum += arr[i + k - 1] - arr[i - 1] 21 | res = Math.max(res, sum) 22 | } 23 | return res / k 24 | } 25 | -------------------------------------------------------------------------------- /5.Daily Challenge/1046. 最后一块石头的重量.js: -------------------------------------------------------------------------------- 1 | // 1046. 最后一块石头的重量 2 | /* 3 | 有一堆石头,每块石头的重量都是正整数。 4 | 5 | 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 6 | 7 | 如果 x == y,那么两块石头都会被完全粉碎; 8 | 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。 9 | 最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。 10 | 11 | */ 12 | 13 | var lastStoneWeight = function (stones) { 14 | stones.sort((a, b) => a - b) 15 | if (stones.length > 1) { 16 | const d = stones.pop() - stones.pop() 17 | if (d) stones.push(d) 18 | return lastStoneWeight(stones) 19 | } 20 | return stones.length ? stones[0] : 0 21 | } 22 | -------------------------------------------------------------------------------- /5.Daily Challenge/49. 字母异位词分组.js: -------------------------------------------------------------------------------- 1 | /* 2 | 49. 字母异位词分组 3 | 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 4 | 输入: ["eat", "tea", "tan", "ate", "nat", "bat"] 5 | 输出: 6 | [ 7 | ["ate","eat","tea"], 8 | ["nat","tan"], 9 | ["bat"] 10 | ] 11 | */ 12 | 13 | var groupAnagrams = function (strs) { 14 | const map = new Map() 15 | for (let str of strs) { 16 | let array = Array.from(str) 17 | array.sort() 18 | let key = array.toString() 19 | let list = map.get(key) ? map.get(key) : new Array() 20 | list.push(str) 21 | map.set(key, list) 22 | } 23 | return Array.from(map.values()) 24 | } 25 | -------------------------------------------------------------------------------- /8.Huahua-leetcode/1.Tree/429. N-ary Tree Level Order Traversal.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | private List> res = new ArrayList<>(); 3 | 4 | public List> levelOrder(Node root) { 5 | if (root != null) { 6 | traverse(root, 0); 7 | } 8 | return res; 9 | } 10 | 11 | public void traverse(Node node, Integer level) { 12 | if (res.size() <= level) { 13 | res.add(new ArrayList()); 14 | } 15 | res.get(level).add(node.val); 16 | for (Node item : node.children) { 17 | traverse(item, level + 1); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /5.Daily Challenge/48. 旋转图像.js: -------------------------------------------------------------------------------- 1 | /* 2 | 48. 旋转图像 3 | 首页将输入 4 | 5 | 1 2 3 6 | 4 5 6 7 | 7 8 9 8 | 9 | 通过交换matrix[i][j], matrix[j][i] 得到 10 | 11 | 1 4 7 12 | 2 5 8 13 | 3 6 9 14 | 15 | 最后将得到每组数组倒序排列即可 16 | 17 | 7 4 1 18 | 8 5 2 19 | 9 6 3 20 | */ 21 | 22 | const rotate = function (matrix) { 23 | let martrixLength = matrix.length 24 | for (let i = 0; i < martrixLength; i++) { 25 | for (let j = i; j < martrixLength; j++) { 26 | let temp = matrix[i][j] 27 | matrix[i][j] = matrix[j][i] 28 | matrix[j][i] = temp 29 | } 30 | } 31 | return matrix.map((item) => item.reverse()) 32 | } 33 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/18.未分类题目/384. 打乱数组.js: -------------------------------------------------------------------------------- 1 | 2 | // ! 384 打乱数组 3 | 4 | // 写成class 5 | class Solution { 6 | constructor(nums){ 7 | this.nums=nums 8 | } 9 | reset=()=> this.nums; 10 | shuffle=()=>{ 11 | let copy=Array.from(this.nums) 12 | let n=copy.length; 13 | for (let i = 0; i < copy.length; i++) { 14 | // i可以从0开始,因此不用+1; 15 | const random = Math.floor( (Math.random()*(n-i)) +i );// [i,n]才能保证是可能性是n! 16 | [copy[random],copy[i]]=[copy[i],copy[random]] 17 | } 18 | return copy 19 | } 20 | 21 | randOne=(n, m)=> Math.floor(Math.random() * (m+1 - n)) + n;//[m,n] 22 | } -------------------------------------------------------------------------------- /2.剑指Offer/DFS_深度遍历_√/36. 二叉搜索树与双向链表.js: -------------------------------------------------------------------------------- 1 | // 36. 二叉搜索树与双向链表 2 | /* 3 | 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。 4 | 要求不能创建任何新的节点,只能调整树中节点指针的指向。 5 | */ 6 | // 中序遍历, 左-中-右 由小到大排序 7 | function treeToDoublyList(root) { 8 | let pre, head 9 | if (root == null) return null 10 | const dfs = (cur) => { 11 | if (cur == null) return 12 | dfs(cur.left) 13 | if (pre != null) pre.right = cur 14 | else head = cur //pre==null时,说明正在表头 15 | cur.left = pre 16 | pre = cur 17 | dfs(cur.right) 18 | } 19 | dfs(root) 20 | // 头部前驱指向尾部,尾部后继为头部 21 | head.left = pre 22 | pre.right = head 23 | return head 24 | } 25 | -------------------------------------------------------------------------------- /5.Daily Challenge/57.插入区间.js: -------------------------------------------------------------------------------- 1 | // 57.插入区间 2 | var insert = function (intervals, newInterval) { 3 | let i = 0 4 | let res = [] 5 | let len = intervals.length 6 | if (len == 0) return [newInterval] 7 | intervals.push(newInterval) 8 | intervals.sort((a, b) => a[0] - b[0]) 9 | len++ 10 | 11 | while (i < len) { 12 | let currLeft = intervals[i][0] 13 | let currRight = intervals[i][1] 14 | while (i < len - 1 && intervals[i + 1][0] <= currRight) { 15 | i++ 16 | currRight = Math.max(intervals[i][1], currRight) 17 | } 18 | res.push([currLeft, currRight]) 19 | i++ 20 | } 21 | return res 22 | } 23 | -------------------------------------------------------------------------------- /2.剑指Offer/动态规划_√/10 青蛙跳台阶.js: -------------------------------------------------------------------------------- 1 | // 10 青蛙跳台阶 2 | // 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 3 | // !动态规划思想 --由底向上通过迭代解决问题 4 | function numWays(n) { 5 | let over = 1000000007 6 | const dp = new Array(n).fill(n) 7 | dp[0] = 1 8 | dp[1] = 1 9 | dp[2] = 2 10 | for (let i = 3; i <= n; i++) { 11 | dp[i] = (dp[i - 2] + dp[i - 1]) % over 12 | } 13 | return dp[n] 14 | } 15 | 16 | //! 也是斐波那契数列变形 17 | var numWays = function (n) { 18 | let n1 = 1, 19 | n2 = 1, 20 | sum 21 | for (let i = 0; i < n; i++) { 22 | sum = (n1 + n2) % 1000000007 23 | n1 = n2 24 | n2 = sum 25 | } 26 | return n1 27 | } 28 | -------------------------------------------------------------------------------- /2.剑指Offer/哈希表_√/2二维数组中的查找.js: -------------------------------------------------------------------------------- 1 | // 2二维数组中的查找 2 | const findNumberIn2DArray = (matrix, target) => { 3 | let flag = false 4 | for (let arr of matrix) { 5 | if (flag === true) break 6 | // 用some减少遍历负担,找到立刻退出 7 | arr.some((item, index, self) => { 8 | if (target === item) { 9 | flag = true 10 | return true 11 | } else { 12 | return false 13 | } 14 | }) 15 | } 16 | return flag 17 | } 18 | 19 | const m1 = [ 20 | [1, 4, 7, 11, 15], 21 | [2, 5, 8, 12, 19], 22 | [3, 6, 9, 16, 22], 23 | [10, 13, 14, 17, 24], 24 | [18, 21, 23, 26, 30], 25 | ] 26 | 27 | console.log(findNumberIn2DArray(m1, 20)) 28 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/20. 表示数值的字符串.js: -------------------------------------------------------------------------------- 1 | // 20. 表示数值的字符串 2 | /* 3 | 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 4 | 例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"-1E-16"、"0123" 5 | 都表示数值, 6 | 但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。 7 | */ 8 | // !注意空格特殊情况 Number("")结果是0 9 | var isNumber = function (s) { 10 | if (s.trim() === '') return false 11 | return isNaN(s.trim()) ? false : true 12 | } 13 | console.log(isNumber('1a3.14')) 14 | console.log(isNumber('-1E-16')) 15 | console.log(isNumber(' ')) 16 | console.log(isNaN('')) //是一个数字 17 | console.log(Number('')) // 0 18 | console.log(isNaN(' ')) // 是一个数字 19 | console.log(Number(' ')) // 0 20 | -------------------------------------------------------------------------------- /5.Daily Challenge/1272. 删除区间.js: -------------------------------------------------------------------------------- 1 | // 1272. 删除区间 2 | function removeInterval(intervals, toBeRemoved) { 3 | let toL = toBeRemoved[0], toR = toBeRemoved[1]; 4 | let ans=[]; 5 | for (let i = 0; i < intervals.length; ++i) { 6 | let x = intervals[i][0], y = intervals[i][1]; 7 | if (y<=toL || x>=toR) { //不相交 8 | ans.push([x, y]); 9 | } 10 | else { 11 | // 相交 12 | if (toL > x) { 13 | ans.push([x, toL]); 14 | } 15 | if (toR < y) { 16 | ans.push([toR, y]); 17 | } 18 | } 19 | } 20 | return ans; 21 | } 22 | -------------------------------------------------------------------------------- /5.Daily Challenge/116. 填充每个节点的下一个右侧节点指针.js: -------------------------------------------------------------------------------- 1 | // 116. 填充每个节点的下一个右侧节点指针 2 | 3 | // 前提:完全二叉树 4 | function connect(root) { 5 | if (root == null) return null 6 | connectTwoNode(root.left, root.right) 7 | return root 8 | } 9 | 10 | // 定义:输入两个节点,将它俩连接起来 11 | function connectTwoNode(node1, node2) { 12 | if (node1 == null || node2 == null) { 13 | return 14 | } 15 | /**** 前序遍历位置 ****/ 16 | // 将传入的两个节点连接 17 | node1.next = node2 18 | 19 | // 连接相同父节点的两个子节点 20 | connectTwoNode(node1.left, node1.right) 21 | connectTwoNode(node2.left, node2.right) 22 | // 连接跨越父节点的两个子节点 23 | connectTwoNode(node1.right, node2.left) 24 | } 25 | -------------------------------------------------------------------------------- /5.Daily Challenge/216. 组合总和 III.js: -------------------------------------------------------------------------------- 1 | /* 2 | 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 3 | 输入: k = 3, n = 9 4 | 输出: [[1,2,6], [1,3,5], [2,3,4]] 5 | 6 | */ 7 | // 216. 组合总和 III 8 | 9 | const combinationSum3 = (k, n) => { 10 | const res = [] 11 | const dfs = (start, comb, sum) => { 12 | // 满足条件: 13 | if (comb.length == k) { 14 | if (sum == n) { 15 | res.push(comb.slice()) 16 | } 17 | return 18 | } 19 | for (let i = start; i <= 9; i++) { 20 | comb.push(i) 21 | dfs(i + 1, comb, sum + i) 22 | comb.pop() // 撤销 23 | } 24 | } 25 | 26 | dfs(1, [], 0) 27 | return res 28 | } 29 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/6.数据结构 76/index.md: -------------------------------------------------------------------------------- 1 | 数据结构 2 | 3 | 基本问题: 4 | (1) 本章按照数据结构分类一些问题,和之前按算法分类的题目相比可能会有重复,因为一道题可能有多个标签。 5 | (2) 对于每种数据结构,需要先学习掌握其基本原理,优缺点,复杂度,和对应语言中的 API 用法。对于其基本的实现方式也要了解。 6 | (3) Array,Matrix,String,Hash 都是一些常用的数据结构,一般在各种题里都会用到,这里主要列举一些没有涉及到其他算法的题目。 7 | (4) Linked List 往往自成一类,会涉及到一些 pointer 操作,需要细心。 8 | (5) Queue 一般用在 BFS 里面比较多,这里不单独列举了。 9 | (6) Heap, Stack 往往和其他知识点混用,但自己单独出题也可以。 10 | (7) Trie,Union Find, Sweep Line 的套路比较明显,需要记住模板。 11 | (8) Binary Index Tree 和 Segment Tree 涉及到的题目有限,需要记住模板。Segment Tree 解法一般来说可以覆盖 BIT 能解决的问题,但是 BIT 写起来短一些。 12 | (9) 复合数据结构里面 LRU 和 LFU 相对比较重要。其他的在掌握基本数据结构即复杂度之后,可以随机应变。 13 | -------------------------------------------------------------------------------- /5.Daily Challenge/858.镜面反射.js: -------------------------------------------------------------------------------- 1 | // 858.镜面反射 2 | // 最小公倍数 3 | function mirrorReflection(p, q) { 4 | let m = p, 5 | n = q 6 | let r 7 | while (n > 0) { 8 | r = m % n 9 | m = n 10 | n = r 11 | } 12 | //l是p奇数倍: 北墙   再判断光线与东西墙的接触次数: 奇数左,偶数右 13 | //偶数倍: 南墙 0 14 | if ((p / m) % 2 == 0) { 15 | return 2 16 | } else if ((q / m) % 2 == 0) { 17 | return 0 18 | } else { 19 | return 1 20 | } 21 | } 22 | 23 | // 最大公约数 24 | function gcd(a, b) { 25 | if (b == 0) { 26 | return a 27 | } 28 | var r = a % b 29 | return gcd(b, r) 30 | } 31 | // 最小公倍数 32 | function scm(a, b) { 33 | return (a * b) / gcd(a, b) 34 | } 35 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/2.排序算法 合集/排序算法分类.js: -------------------------------------------------------------------------------- 1 | /* 2 | >冒泡排序 3 | >交换排序 4 | >快速排序 5 | 6 | >简单插入排序 7 | >插入排序 8 | >希尔排序 9 | !比较类排序 10 | 11 | >简单选择排序 12 | >选择排序 13 | >堆排序 14 | 15 | >二路归并排序 16 | >归并排序 17 | >多路归并排序 18 | 19 | 20 | 21 | 22 | >桶排序 23 | !非比较类算法 >计数排序 24 | >基数排序 25 | 26 | */ -------------------------------------------------------------------------------- /1.算法框架_labuladong/6.双指针_快慢指针/27.移动元素.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 4 | 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 5 | 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 6 | */ 7 | 8 | // ! 快慢指针 原地改变数组数值 9 | function removeElement(nums,val) { 10 | let fast = 0, slow = 0; 11 | while (fast < nums.length) { 12 | if (nums[fast] != val) { 13 | nums[slow] = nums[fast]; 14 | slow++; 15 | } 16 | fast++; 17 | } 18 | return slow; 19 | } 20 | 21 | /* 22 | 注意这里和有序数组去重的解法有一个重要不同,我们这里是先给 nums[slow] 赋值然后再给 slow++, 23 | 这样可以保证 nums[0..slow-1] 是不包含值为 val 的元素的, 24 | 最后的结果数组长度就是 slow。 25 | */ -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/链表/876. 链表的中间结点.ts: -------------------------------------------------------------------------------- 1 | namespace LeetCode876 { 2 | // 快慢指针 3 | function middleNode(head: ListNode | null): ListNode | null { 4 | let slow = head, 5 | fast = head 6 | while (fast != null && fast.next != null) { 7 | // 慢指针走一步,快指针走两步 8 | slow = slow!.next 9 | fast = fast.next.next 10 | } 11 | // 慢指针指向中点 12 | return slow 13 | } 14 | 15 | class ListNode { 16 | val: number 17 | next: ListNode | null 18 | constructor(val?: number, next?: ListNode | null) { 19 | this.val = val === undefined ? 0 : val 20 | this.next = next === undefined ? null : next 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/45. 把数组排成最小的数.js: -------------------------------------------------------------------------------- 1 | // 45. 把数组排成最小的数 2 | /* 3 | 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数, 4 | 打印能拼接出的所有数字中最小的一个。 5 | 6 | 示例 1: 7 | 8 | 输入: [10,2] 9 | 输出: "102" 10 | 示例 2: 11 | 12 | 输入: [3,30,34,5,9] 13 | 输出: "3033459" 14 | */ 15 | const nums = [3, 30, 34, 5, 9] 16 | 17 | /* 解题思路: 18 | 字符串:只要 x + y < y + x,即可认为 x "<" y 19 | 算法流程: 20 | 21 | 设置排序规则:只要 "" + x + y < "" + y + x,即可认为 x < y; 22 | 使用数组的 join() 方法将数组拼接成字符串。 23 | 代码: */ 24 | var minNumber = function (nums) { 25 | nums.sort((a, b) => { 26 | if ('' + a + b < '' + b + a) { 27 | return -1 28 | } else return 1 29 | }) 30 | return nums.join('') 31 | } 32 | minNumber(nums) 33 | -------------------------------------------------------------------------------- /4.Basic Challenge/4 种花问题.js: -------------------------------------------------------------------------------- 1 | /* 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 2 | 3 | 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 4 | 5 | 输入: flowerbed = [1,0,0,0,1], n = 1 6 | 输出: True 7 | 8 | */ 9 | 10 | // 只判断 当前为0 前后也不为1 则可以种花,num ++ 11 | const canPlaceFlowers = function (flowerbed, n) { 12 | let num = 0 13 | for (let i = 0, length = flowerbed.length; i < length; i++) { 14 | if (flowerbed[i] === 0 && flowerbed[i - 1] !== 1 && flowerbed[i + 1] !== 1) { 15 | // undefined也不等于1 16 | num++ 17 | i++ 18 | } 19 | } 20 | return n <= num 21 | } 22 | 23 | // [0,0,1,0,0] 24 | -------------------------------------------------------------------------------- /5.Daily Challenge/830. 较大分组的位置.js: -------------------------------------------------------------------------------- 1 | // 830. 较大分组的位置 2 | /* 3 | 输入:s = "abbxxxxzzy" 4 | 输出:[[3,6]] 5 | 解释:"xxxx" 是一个起始于 3 且终止于 6 的较大分组。 6 | 示例 2: 7 | 8 | 输入:s = "abc" 9 | 输出:[] 10 | 解释:"a","b" 和 "c" 均不是符合要求的较大分组。 11 | 示例 3: 12 | 13 | 输入:s = "abcdddeeeeaabbbcd" 14 | 输出:[[3,5],[6,9],[12,14]] 15 | 解释:较大分组为 "ddd", "eeee" 和 "bbb" 16 | 17 | */ 18 | 19 | var largeGroupPositions = function (s) { 20 | let i = 0, 21 | start = 0, 22 | res = [] 23 | // =s.length 时,JS数组越界不报错,处理类似 aaa 情况 24 | while (++i <= s.length) 25 | if (s[start] !== s[i]) { 26 | if (i - start >= 3) res.push([start, i - 1]) 27 | start = i 28 | } 29 | return res 30 | } 31 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/1.二分法 21/index.md: -------------------------------------------------------------------------------- 1 | 基本问题: 2 | (1)基本思想?(有序的数据,每次通过判断逻辑排除掉一部分的答案,直到触发终止条件) 3 | (2)二分法实现模板(可以递归,可以迭代;一般以迭代为主) 4 | (3)移动两个指针(start与end)的含义?移动条件是什么(筛选掉一部分数据的依据)?循环的截止条件? 5 | (4)数据中是否有重复数字?对结果有什么影响? 6 | (5)为什么你选择的模板中使用start < end 或者 start <= end 或者 start + 1 < end 作为终止条件?这样写是如何避免死循环的?不这么写在什么情况下会出现死循环? 7 | (6)在处理逻辑中,当前结果>, <, = 目标值时分别如何处理?移动指针的依据是什么? 8 | (7)循环退出后是否需要额外处理? 9 | (8)如果遇到corner case根本没进主循环,你的代码是否能正常工作? 10 | (9)为什么Java需要写 mid = start + (end - start) / 2 而 Python可以直接写 mid = (start + end) // 2 ? 11 | (10)如何理解从基本的朴素二分,到相对复杂的条件二分,到更加抽象的答案二分?(在一个显性有序数组中一次砍掉一部分 --> 在一组有规律的数据上利用判断条件逐步缩小范围 --> 在一个有序的抽象模型里,利用不断的"猜测+检验"逐步逼近最终结果) -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第三期/96. 不同的二叉搜索树.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | // 备忘录 3 | int[][] memo; 4 | 5 | int numTrees(int n) { 6 | // 备忘录的值初始化为 0 7 | memo = new int[n + 1][n + 1]; 8 | return count(1, n); 9 | } 10 | 11 | int count(int lo, int hi) { 12 | if (lo > hi) 13 | return 1; 14 | // 查备忘录 15 | if (memo[lo][hi] != 0) { 16 | return memo[lo][hi]; 17 | } 18 | 19 | int res = 0; 20 | for (int mid = lo; mid <= hi; mid++) { 21 | int left = count(lo, mid - 1); 22 | int right = count(mid + 1, hi); 23 | res += left * right; 24 | } 25 | // 将结果存入备忘录 26 | memo[lo][hi] = res; 27 | 28 | return res; 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/40. 最小的k个数.js: -------------------------------------------------------------------------------- 1 | // 40. 最小的k个数 2 | /* 3 | 输入整数数组 arr ,找出其中最小的 k 个数。例如, 4 | 输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 5 | 6 | 7 | 输入:arr = [3,2,1], k = 2 8 | 输出:[1,2] 或者 [2,1] 9 | 10 | 输入:arr = [0,1,2,1], k = 1 11 | 输出:[0] 12 | 13 | */ 14 | let arr = [0, 0, 0, 2, 0, 5], 15 | k = 1 16 | var getLeastNumbers = function (arr, k) { 17 | let res = [] 18 | arr = arr.sort((a, b) => a - b) 19 | arr.some((item, index, self) => { 20 | if (k === 0) return true 21 | if (index === k - 1) { 22 | res.push(item) 23 | return true 24 | } 25 | res.push(item) 26 | }) 27 | return res 28 | } 29 | console.log(getLeastNumbers(arr, k)) 30 | -------------------------------------------------------------------------------- /5.Daily Challenge/237. Delete Node in a Linked List.js: -------------------------------------------------------------------------------- 1 | // 237. Delete Node in a Linked List 2 | 3 | var deleteNode = function(node) { 4 | node.val=node.next.val; 5 | node.next=node.next.next; 6 | }; 7 | 8 | 9 | // 剑指 Offer 18. 删除链表的节点 10 | 11 | var deleteNode = function(head, val) { 12 | let pre = new ListNode(-1); // 哨兵节点 13 | pre.next = head; 14 | 15 | let node = pre; 16 | while (node.next) { 17 | if (node.next.val === val) { 18 | node.next = node.next.next; 19 | break; 20 | } 21 | node = node.next; 22 | } 23 | return pre.next; 24 | }; 25 | 26 | var deleteNode = function(head, val) { 27 | 28 | }; -------------------------------------------------------------------------------- /3.Data Structure/13.补充_算法方法知识点.js: -------------------------------------------------------------------------------- 1 | // ! 递归本质是不断压栈再不断出栈。是自上而下解决问题,等待下面返回上来的结果 2 | 3 | // ! 动态规划是自下而上解决问题,从已知的 case 出发,存储前面的状态,迭代出最后的结果。 4 | 5 | /* 6 | 贪心算法基础 7 | 8 | 贪心算法从问题的某一个初始解出发,逐步逼近给定的目标,以便尽快求出更好的解。 9 | 当达到算法中的某一步不能再继续前进时,就停止算法,给出一个近似解。 10 | 由贪心算法的特点和思路可看出,贪心算法存在以下3个问题。 11 | 12 | ① 不能保证最后的解是最优的。 13 | ② 不能用来求最大或最小解问题。 14 | ③ 只能求满足某些约束条件的可行解的范围。 15 | 16 | 实现该算法的基本过程如下。 17 | 18 | (1)从问题的某一初始解出发。 19 | (2)while能向给定总目标前进一步。 20 | (3)求出可行解的一个解元素。 21 | (4)由所有解元素组合成问题的一个可行解。 22 | */ 23 | 24 | 25 | /* 26 | ! 回溯法 -----也叫试探法 27 | 它先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序 28 | 逐一进行枚举和检验。当发现当前候选解不可能是正确的解时, 29 | 就选择下一个候选解。 30 | 31 | * 在试探算法中,放弃当前候选解,并继续寻找下一个候选解的过程称为回溯。 32 | */ -------------------------------------------------------------------------------- /5.Daily Challenge/649. Dota2 参议院.js: -------------------------------------------------------------------------------- 1 | // 649. Dota2 参议院 2 | var predictPartyVictory = function (senate) { 3 | const n = senate.length 4 | let radiant = [], 5 | dire = [] 6 | // 不要用for...in遍历数组 7 | Array.from(senate).map((val, i) => { 8 | if (val === 'R') { 9 | radiant.push(i) 10 | } else { 11 | dire.push(i) 12 | } 13 | }) 14 | 15 | while (radiant.length && dire.length) { 16 | if (radiant[0] < dire[0]) { 17 | radiant.push(radiant[0] + n) //下一轮 18 | } else { 19 | dire.push(dire[0] + n) 20 | } 21 | radiant.shift() //这一轮投过了,被封的直接删除了,有权利的继续push到下一轮 22 | dire.shift() 23 | } 24 | return radiant.length ? 'Radiant' : 'Dire' 25 | } 26 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/53 - I. 在排序数组中查找数字 I.js: -------------------------------------------------------------------------------- 1 | // 53 - I. 在排序数组中查找数字 I 2 | /* 3 | 输入: nums = [5,7,7,8,8,10], target = 8 4 | 输出: 2 5 | 6 | 输入: nums = [5,7,7,8,8,10], target = 6 7 | 输出: 0 8 | */ 9 | 10 | var search = function (nums, target) { 11 | const map = new Map() 12 | let count = 1 13 | for (let i = 0; i < nums.length; i++) { 14 | if (!map.has(nums[i])) { 15 | map.set(nums[i], count) 16 | continue 17 | } 18 | let temp = map.get(nums[i]) 19 | map.set(nums[i], ++temp) 20 | } 21 | let res = map.get(target) 22 | return res === undefined ? 0 : res 23 | } 24 | const nums = [5, 7, 7, 8, 8, 10] 25 | const tar = 6 26 | console.log(search(nums, tar)) 27 | -------------------------------------------------------------------------------- /5.Daily Challenge/147. 对链表进行插入排序(升序排序).js: -------------------------------------------------------------------------------- 1 | // 147. 对链表进行插入排序(升序排序) 2 | /* 3 | 输入: -1->5->3->4->0 4 | 输出: -1->0->3->4->5 5 | */ 6 | // 哨兵节点,每次都从头向后遍历一遍,把新值增加到该有的地方。 7 | // 从小到大排序 8 | 9 | const insertionSortList = (head) => { 10 | const guard = new ListNode(-100) 11 | 12 | while (head) { 13 | let nextNode = head.next 14 | let cur = guard 15 | // 从小到大 16 | while (cur.next !== null && cur.next.val < head.val) { 17 | cur = cur.next 18 | } 19 | /* 20 | 例如将10->7>9插入 12->11->8->3; 21 | 12->11->(10)->8->3 22 | 下一轮遍历7->9 23 | */ 24 | head.next = cur.next 25 | cur.next = head 26 | head = nextNode 27 | } 28 | return guard.next 29 | } 30 | -------------------------------------------------------------------------------- /5.Daily Challenge/205. 同构字符串.js: -------------------------------------------------------------------------------- 1 | /* 2 | 205. 同构字符串 3 | 4 | 输入: s = "egg", t = "add" 5 | 输出: true 6 | 输入: s = "foo", t = "bar" 7 | 输出: false 8 | 9 | */ 10 | // 同构字符串,每字符 首次出现、最后出现、指定位出现 索引始终相同 11 | const isIsomorphic = function (s, t) { 12 | for (let i = 0; i < s.length; i++) if (s.indexOf(s[i]) !== t.indexOf(t[i])) return false 13 | return true 14 | } 15 | 16 | // map哈希表 17 | const isIsomorphic = function (s, t) { 18 | let S = new Map(), 19 | T = new Map(), 20 | i = -1 21 | while (i++ < s.length) { 22 | const a = s[i], 23 | b = t[i] 24 | if (S.get(a) !== T.get(b)) return false 25 | S.set(a, i) 26 | T.set(b, i) 27 | } 28 | return true 29 | } 30 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/21.调整数组顺序使奇数位于偶数前面.js: -------------------------------------------------------------------------------- 1 | // 21.调整数组顺序使奇数位于偶数前面 2 | /* 3 | 输入一个整数数组,实现一个函数来调整该数组中数字的顺序, 4 | 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 5 | 6 | 输入:nums = [1,2,3,4] 7 | 输出:[1,3,2,4] 8 | 注:[3,1,2,4] 也是正确的答案之一。 9 | */ 10 | 11 | var exchange = function (nums) { 12 | let left = [], 13 | right = [], 14 | res = [] 15 | for (let i = 0; i < nums.length; i++) { 16 | if (nums[i] % 2 === 0) { 17 | right.push(nums[i]) 18 | continue 19 | } 20 | left.push(nums[i]) 21 | } 22 | left.map((item) => { 23 | res.push(item) 24 | }) 25 | right.map((item) => { 26 | res.push(item) 27 | }) 28 | return res 29 | } 30 | 31 | console.log(exchange([1, 2, 3, 4, 5])) 32 | -------------------------------------------------------------------------------- /5.Daily Challenge/277.搜索名人.js: -------------------------------------------------------------------------------- 1 | // Forward declaration of the knows API. 2 | // https://mp.weixin.qq.com/s/hd06P3ASUAmA5apbAB1nIw 3 | /* 4 | 5 | 输入: graph = [ 6 | [1,1,0], 7 | [0,1,0], 8 | [1,1,1] 9 | ] 10 | 输出: 1 11 | */ 12 | // knows是一个函数, n是第i个人; 13 | var solution = function (knows) { 14 | return function (n) { 15 | let result = 0 16 | for (let i = 1; i < n; ++i) { 17 | if (knows(result, i)) { 18 | //a认识b? 19 | result = i 20 | } 21 | } 22 | for (let i = 0; i < n; ++i) { 23 | if (result == i) continue 24 | // 名人不认识某人,或者某人不认识名人,则-1 25 | if (knows(result, i) || !knows(i, result)) return -1 26 | } 27 | return result 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /5.Daily Challenge/327. 区间和的个数.js: -------------------------------------------------------------------------------- 1 | // 327. 区间和的个数 2 | function countRangeSum(nums, lower, upper) { 3 | let sum = 0 4 | let len = nums.length 5 | if (len == 0) return 0 6 | let prefix = new Array(len) 7 | prefix[0] = nums[0] 8 | if (nums[0] >= lower && nums[0] <= upper) sum++ 9 | // 累加和 10 | for (i = 1; i < len; i++) { 11 | prefix[i] = prefix[i - 1] + nums[i] 12 | if (prefix[i] >= lower && prefix[i] <= upper) sum++ 13 | } 14 | //从dp[1]开始反推数字,列举所有可能 15 | for (j = 1; j < len; j++) { 16 | for (let i = 0; i < j; i++) { 17 | // 算单个数的大小 18 | let t = prefix[j] - prefix[i] 19 | if (t >= lower && t <= upper) sum++ 20 | } 21 | } 22 | return sum 23 | } 24 | -------------------------------------------------------------------------------- /5.Daily Challenge/605. 种花问题1206.js: -------------------------------------------------------------------------------- 1 | // 605. 种花问题1206 2 | /* 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 3 | 4 | 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 5 | 6 | 输入: flowerbed = [1,0,0,0,1], n = 1 7 | 输出: True 8 | 9 | */ 10 | 11 | // 只判断 当前为0 前后也不为1 则可以种花,num ++ 12 | const canPlaceFlowers = function (flowerbed, n) { 13 | let num = 0 14 | for (let i = 0, length = flowerbed.length; i < length; i++) { 15 | if (flowerbed[i] === 0 && flowerbed[i - 1] !== 1 && flowerbed[i + 1] !== 1) { 16 | // undefined也不等于1 17 | num++ 18 | i++ 19 | } 20 | } 21 | return n <= num 22 | } 23 | 24 | // [0,0,1,0,0] 25 | -------------------------------------------------------------------------------- /5.Daily Challenge/BFS/103. Binary Tree Zigzag Level Order Traversal.js: -------------------------------------------------------------------------------- 1 | var zigzagLevelOrder = function(root) { 2 | let res=[],queue=[]; 3 | if(root===null){ return []} 4 | queue.push(root); 5 | while(queue.length){ 6 | let level=[]; 7 | //注意,这里由于queue.shift(),所以必须在外部定义长度 8 | const len=queue.length; 9 | for(let i=0;i new Array(n + 1).fill(0)) 6 | 7 | function count(lo: number, hi: number) { 8 | if (lo > hi) return 1 // 空节点,也算一种情况 9 | if (memo[lo][hi] != 0) return memo[lo][hi] 10 | 11 | let res = 0 12 | for (let mid = lo; mid <= hi; mid++) { 13 | let left = count(lo, mid - 1) 14 | let right = count(mid + 1, hi) 15 | res += left * right 16 | } 17 | memo[lo][hi] = res // 将结果存入备忘录 18 | return res 19 | } 20 | return count(1, n) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /5.Daily Challenge/DFS/101 Symmetric Tree.js: -------------------------------------------------------------------------------- 1 | /* 2 | Given a binary tree, check whether it is a mirror of itself 3 | (ie, symmetric around its center). 4 | For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 5 | 1 6 | / \ 7 | 2 2 8 | / \ / \ 9 | 3 4 4 3 10 | 11 | But the following [1,2,2,null,3,null,3] is not: 12 | 13 | 1 14 | / \ 15 | 2 2 16 | \ \ 17 | 3 3 18 | */ 19 | 20 | var isSymmetric = function(root) { 21 | const dfs=(p,q)=>{ 22 | if(p==null && q==null)return true 23 | if(p==null || q==null)return false 24 | return p.val===q.val && dfs(p.left,q.right) && dfs(p.right,q.left) 25 | } 26 | return dfs(root,root) 27 | }; -------------------------------------------------------------------------------- /5.Daily Challenge/7. 整数反转.ts: -------------------------------------------------------------------------------- 1 | const reverse = function (x: number): number { 2 | let res = 0 3 | while (x !== 0) { 4 | res = res * 10 + (x % 10) 5 | if (res > 2 ** 31 - 1 || res < -(2 ** 31)) return 0 6 | x = x > 0 ? Math.floor(x / 10) : Math.ceil(x / 10) 7 | } 8 | return res 9 | } 10 | 11 | /* 12 | 13 | class Solution { 14 | public int reverse(int x) { 15 | int res=0; 16 | while(x!=0){ 17 | if(res>Integer.MAX_VALUE /10 || res0? (int) Math.floor(x/10) : (int) Math.ceil(x/10); 20 | } 21 | return res; 22 | } 23 | } 24 | 25 | 26 | */ 27 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/链表/160. 相交链表.ts: -------------------------------------------------------------------------------- 1 | namespace Leetcode160 { 2 | function getIntersectionNode(headA: Node, headB: Node): Node { 3 | if (headA === null || headB === null) { 4 | return null 5 | } 6 | let pA: Node = headA, 7 | pB: Node = headB 8 | while (pA !== pB) { 9 | pA = pA === null ? headB : pA.next 10 | pB = pB === null ? headA : pB.next 11 | } 12 | return pA 13 | } 14 | 15 | // end 16 | type Node = ListNode | null 17 | class ListNode { 18 | val: number 19 | next: Node 20 | constructor(val?: number, next?: Node) { 21 | this.val = val === undefined ? 0 : val 22 | this.next = next === undefined ? null : next 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/53 - II. 0- n-1中缺失的数字.js: -------------------------------------------------------------------------------- 1 | // 53 - II. 0- n-1中缺失的数字 2 | /* 3 | 一个长度为n-1的递增排序数组中的所有数字都是唯一的, 4 | 并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字 5 | 中有且只有一个数字不在该数组中,请找出这个数字。 6 | 7 | 输入: [0,1,3] 8 | 输出: 2 9 | 10 | 输入: [0,1,2,3,4,5,6,7,9] 11 | 输出: 8 12 | */ 13 | const arr = [0, 1, 3, 4] 14 | 15 | // ! 指针法 16 | var missingNumber = function (nums) { 17 | let pointer = 0, 18 | res 19 | for (let i = 0; i <= nums.length + 1; ++i) { 20 | if (pointer === nums.length) { 21 | res = nums[nums.length - 1] + 1 22 | break 23 | } 24 | if (pointer !== nums[i]) { 25 | res = pointer 26 | break 27 | } 28 | ++pointer 29 | } 30 | return res 31 | } 32 | 33 | console.log(missingNumber(arr)) 34 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/Prim算法/index.md: -------------------------------------------------------------------------------- 1 | 图论的最小生成树问题,就是让你从图中找若干边形成一个边的集合 mst,这些边有以下特性: 2 | 3 | 1、这些边组成的是一棵树(树和图的区别在于不能包含环)。 4 | 5 | 2、这些边形成的树要包含所有节点。 6 | 7 | 3、这些边的权重之和要尽可能小。 8 | 首先,Kruskal 算法用到了贪心思想,来满足权重之和尽可能小的问题: 9 | 10 | 先对所有边按照权重从小到大排序,从权重最小的边开始,选择合适的边加入 mst 集合,这样挑出来的边组成的树就是权重和最小的。 11 | 12 | 其次,Kruskal 算法用到了 Union-Find 并查集算法,来保证挑选出来的这些边组成的一定是一棵「树」,而不会包含环或者形成一片「森林」: 13 | 14 | 如果一条边的两个节点已经是连通的,则这条边会使树中出现环;如果最后的连通分量总数大于 1,则说明形成的是「森林」而不是一棵「树」。 15 | 16 | 那么,本文的主角 Prim 算法是使用什么逻辑来计算最小生成树的呢? 17 | 18 | 首先,Prim 算法也使用贪心思想来让生成树的权重尽可能小,也就是「切分定理」,这个后文会详细解释。 19 | 20 | 其次,Prim 算法使用 BFS 算法思想 和 visited 布尔数组避免成环,来保证选出来的边最终形成的一定是一棵树。 21 | 22 | Prim 算法不需要事先对所有边排序,而是利用优先级队列动态实现排序的效果,所以我觉得 Prim 算法类似于 Kruskal 的动态过程。 23 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第三期/96. Unique Binary Search Trees.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | func main() {} 4 | 5 | func numTrees(n int) int { 6 | // 备忘录的值初始化为 0 7 | memo := make([][]int, n+1) 8 | for i := range memo { 9 | memo[i] = make([]int, n+1) 10 | } 11 | var count func(lo, hi int) int 12 | count = func(lo, hi int) int { 13 | if lo > hi { 14 | return 1 15 | } // 空节点,也算一种情况 16 | if memo[lo][hi] != 0 { 17 | return memo[lo][hi] 18 | } 19 | res := 0 20 | for mid := lo; mid <= hi; mid++ { 21 | left := count(lo, mid-1) 22 | right := count(mid+1, hi) 23 | res += left * right 24 | } 25 | memo[lo][hi] = res // 将结果存入备忘录 26 | return res 27 | } 28 | return count(1, n) 29 | } 30 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/5.动态规划问题 合集/452. 戳爆气球.js: -------------------------------------------------------------------------------- 1 | /* 2 | 输入: 3 | [[10,16], [2,8], [1,6], [7,12]] 4 | 5 | 输出: 6 | 2 7 | 8 | 解释: 9 | 对于该样例,我们可以在x = 6(射爆[2,8],[1,6]两个气球)和 10 | x = 11(射爆另外两个气球)。 11 | 12 | */ 13 | 14 | function findMinArrowShots(intvs) { 15 | if (intvs.length == 0) return 0; 16 | // 按 end 升序排序 17 | intvs.sort((a,b)=>{return a[1] - b[1]}) 18 | // 至少有一个区间不相交 19 | let count = 1; 20 | // 排序后,第一个区间就是 x 21 | let x_end = intvs[0][1]; 22 | for (let interval of intvs) { 23 | let start = interval[0]; 24 | if (start > x_end) { 25 | // 找到下一个选择的区间了 26 | count++; 27 | x_end = interval[1]; 28 | } 29 | } 30 | return count; //返回的是最多有几个区间不会重叠 31 | } -------------------------------------------------------------------------------- /5.Daily Challenge/832. 翻转图像.js: -------------------------------------------------------------------------------- 1 | // 832. 翻转图像 2 | /* 3 | 输入: [ 4 | [1,1,0,0], 5 | [1,0,0,1], 6 | [0,1,1,1], 7 | [1,0,1,0] 8 | ] 9 | 输出: [ 10 | [1,1,0,0], 11 | [0,1,1,0], 12 | [0,0,0,1], 13 | [1,0,1,0] 14 | ] 15 | 解释: 首先翻转每一行: 16 | [ 17 | [0,0,1,1], 18 | [1,0,0,1], 19 | [1,1,1,0], 20 | [0,1,0,1] 21 | ]; 22 | 23 | 然后反转图片: 24 | [ 25 | [1,1,0,0], 26 | [0,1,1,0], 27 | [0,0,0,1], 28 | [1,0,1,0] 29 | ] 30 | */ 31 | const flipAndInvertImage = function (A) { 32 | return A.map((item) => item.reverse().map((item1) => (item1 === 0 ? 1 : 0))) 33 | } 34 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/New Topics_after 2021-08/DFS 岛屿问题/test.ts: -------------------------------------------------------------------------------- 1 | namespace TestAAA { 2 | // 原始值:只是把变量里的值传递给参数,之后参数和这个变量互不影响 3 | const dfs = (str: string) => { 4 | str += '12,' 5 | if (str.length > 30) { 6 | return 7 | } 8 | dfs(str) 9 | dfs(str) 10 | } 11 | const set = new Set() 12 | export const test = () => { 13 | for (let i of new Array(10).fill(0)) { 14 | let str = '' 15 | dfs(str) 16 | set.add(str) 17 | } 18 | console.log(set) 19 | } 20 | 21 | export const test2 = () => { 22 | let str = '100' 23 | const dfs = (str: string) => { 24 | str += '20000000' 25 | console.log(str) 26 | } 27 | dfs(str) 28 | console.log(str) 29 | } 30 | } 31 | TestAAA.test2() 32 | -------------------------------------------------------------------------------- /2.剑指Offer/数组+字符串_√/58 - I. 翻转单词顺序.js: -------------------------------------------------------------------------------- 1 | // 58 - I. 翻转单词顺序 2 | /* 3 | 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见, 4 | 标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。 5 | 输入: "a good example" 6 | 输出: "example good a" 7 | */ 8 | 9 | var reverseWords = function (s) { 10 | var str = s 11 | .trim() 12 | .split(' ') 13 | .filter((item) => item != '') 14 | .reverse() 15 | .join(' ') 16 | return str 17 | } 18 | 19 | var reverseWords1 = function (s) { 20 | res = s.trim().replace(/\s+/g, ' ').split(' ') 21 | let len = res.length 22 | for (let i = 0; i < res.length / 2; i++) { 23 | term = res[i] 24 | res[i] = res[len - i - 1] 25 | res[len - i - 1] = term 26 | } 27 | return res.join(' ') 28 | } 29 | -------------------------------------------------------------------------------- /3.Data Structure/temp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 23 | 24 | -------------------------------------------------------------------------------- /5.Daily Challenge/977. 有序数组的平方.js: -------------------------------------------------------------------------------- 1 | // 977. 有序数组的平方 2 | /* 3 | 原数组是非递减排列的,元素的平方和最大,要么是第一项,要么是最后一项。 4 | 维护头尾指针,所指向的元素,平方和更大者,安排到结果数组的最后一项。 5 | 6 | 指针相应的更新,继续比较头尾元素的平方和,较大者,安排到结果数组的倒数第二项。 7 | 8 | 以此类推。把结束数组的所有元素填满。 9 | 10 | */ 11 | 12 | var sortedSquares = function (A) { 13 | return A.map((i) => i * i).sort((a, b) => a - b) 14 | } 15 | 16 | // 17 | const sortedSquares = (A) => { 18 | let start = 0 19 | let end = A.length - 1 20 | const res = new Array(A.length) 21 | 22 | for (let i = A.length - 1; i >= 0; i--) { 23 | if (A[start] ** 2 > A[end] ** 2) { 24 | res[i] = A[start] ** 2 25 | start++ 26 | } else { 27 | res[i] = A[end] ** 2 28 | end-- 29 | } 30 | } 31 | 32 | return res 33 | } 34 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/3.二叉搜索树/第二期/检测BST.java: -------------------------------------------------------------------------------- 1 | public class Solution { 2 | boolean isValidBST(TreeNode root) { 3 | return isValidBST(root, null, null); 4 | } 5 | 6 | /* 限定以 root 为根的子树节点必须满足 max.val > root.val > min.val */ 7 | boolean isValidBST(TreeNode root, TreeNode min, TreeNode max) { 8 | // base case 9 | if (root == null) 10 | return true; 11 | // 若 root.val 不符合 max 和 min 的限制,说明不是合法 BST 12 | if (min != null && root.val <= min.val) 13 | return false; 14 | if (max != null && root.val >= max.val) 15 | return false; 16 | // 限定左子树的最大值是 root.val,右子树的最小值是 root.val 17 | return isValidBST(root.left, min, root) 18 | && isValidBST(root.right, root, max); 19 | } 20 | } -------------------------------------------------------------------------------- /2.剑指Offer/哈希表_√/50. 第一个只出现一次的字符.js: -------------------------------------------------------------------------------- 1 | // 50. 第一个只出现一次的字符 2 | /* 3 | 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 4 | */ 5 | /* s = "abaccdeff" 6 | 返回 "b" 7 | 8 | s = "" 9 | 返回 " " 10 | */ 11 | const s = 'cc' 12 | var firstUniqChar = function (s) { 13 | if (s === '') return ' ' 14 | const map = new Map() 15 | let count, res 16 | for (let i = 0; i < s.length; ++i) { 17 | if (!map.has(s[i])) { 18 | count = 1 19 | } else { 20 | count++ 21 | } 22 | map.set(s[i], count) 23 | } 24 | 25 | ;[...map.keys()].some((item) => { 26 | if (map.get(item) === 1) { 27 | res = item 28 | return true 29 | } else { 30 | res = ' ' 31 | } 32 | }) 33 | return res 34 | } 35 | console.log(firstUniqChar(s)) 36 | -------------------------------------------------------------------------------- /4.Basic Challenge/1_转置算法.js: -------------------------------------------------------------------------------- 1 | //1.转置矩阵行数是原矩阵的列数,转置矩阵的列数是原始矩阵的行数 2 | //2.转置矩阵下标(i,j)的元素,转置后的(j,i)的元素 3 | function reverseMatrix(sourceArr){ 4 | var reversedArr = []; 5 | sourceArr.reverse(); 6 | //原矩阵列数 7 | for(var i =0; i < sourceArr[0].length ; i++){ 8 | reversedArr[i] = [] 9 | for(var j=0; j < sourceArr.length; j++){ 10 | reversedArr[i][j] = sourceArr[j][i] 11 | } 12 | } 13 | 14 | return reversedArr; 15 | } 16 | 17 | //调用 18 | var tArr = [ 19 | [1,2,3], 20 | [4,5,6], 21 | [7,8,9] 22 | ] 23 | var testArr = reverseMatrix(tArr) 24 | console.log(JSON.stringify(testArr)) 25 | /* 26 | res=[ 27 | [7,4,1], 28 | [8,5,2], 29 | [9,6,3]] 30 | */ -------------------------------------------------------------------------------- /5.Daily Challenge/334. 递增的三元子序列.js: -------------------------------------------------------------------------------- 1 | // 334. 递增的三元子序列 2 | /* 3 | 4 | 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。 5 | 6 | 数学表达式如下: 7 | 8 | 如果存在这样的 i, j, k,  且满足 0 ≤ i < j < k ≤ n-1, 9 | 使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。 10 | 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。 11 | 12 | 输入: [1,2,3,4,5] 13 | 输出: true 14 | 15 | 16 | */ 17 | 18 | /* 19 | 当前数分别跟在前面每个数后,如果比那数大,递增序列长度+1。从0到i取最大 20 | 找最大递增序列长度超过3的位置 21 | 22 | 23 | */ 24 | 25 | const increasingTriplet = function (arr) { 26 | let dp = new Array(arr.length).fill(1) 27 | for (let i = 1; i < arr.length; i++) { 28 | for (let j = 0; j < i; j++) if (arr[j] < arr[i]) dp[i] = Math.max(dp[i], dp[j] + 1) 29 | if (dp[i] >= 3) return true 30 | } 31 | return false 32 | } 33 | -------------------------------------------------------------------------------- /5.Daily Challenge/98. 验证二叉搜索树.js: -------------------------------------------------------------------------------- 1 | // 98. 验证二叉搜索树 2 | var isValidBST = function (root) { 3 | let min = Number.MIN_SAFE_INTEGER 4 | let max = Number.MAX_SAFE_INTEGER 5 | return dfs(root, min, max) 6 | } 7 | 8 | function dfs(root, min, max) { 9 | if (!root) return true 10 | if (root.val >= max || root.val <= min) return false 11 | return dfs(root.left, min, root.val) && dfs(root.right, root.val, max) 12 | } 13 | 14 | // ====================== 15 | 16 | function isValidBST(root, min = null, max = null) { 17 | if (!root) return true 18 | if (min && min.val >= root.val) return false 19 | if (max && max.val <= root.val) return false 20 | return isValidBST(root.left, min, root) && isValidBST(root.right, root, max) 21 | } 22 | -------------------------------------------------------------------------------- /6.Sorted Challenges 310p/4.二叉树与递归 38/遍历器相关/173. Binary Search Tree Iterator.java: -------------------------------------------------------------------------------- 1 | import java.util.LinkedList; 2 | 3 | class BSTIterator { 4 | private int idx; 5 | private List arr; 6 | 7 | public BSTIterator(TreeNode root) { 8 | idx = 0; 9 | arr = new ArrayList(); 10 | traverse(root, arr); 11 | } 12 | 13 | public int next() { 14 | return arr.get(idx++); 15 | } 16 | 17 | public boolean hasNext() { 18 | return idx < arr.size(); 19 | } 20 | 21 | private void traverse(TreeNode root, List arr) { 22 | if (root == null) { 23 | return; 24 | } 25 | traverse(root.left, arr); 26 | arr.add(root.val); 27 | traverse(root.right, arr); 28 | } 29 | } -------------------------------------------------------------------------------- /5.Daily Challenge/424.替换后的最长重复字符串.js: -------------------------------------------------------------------------------- 1 | // 424.替换后的最长重复字符串 2 | // 循环遍历字符串数组 3 | /* 4 | 输入:s = "ABAB", k = 2 5 | 输出:4 6 | 解释:用两个'A'替换为两个'B',反之亦然。 7 | 8 | */ 9 | const characterReplacement = function (s, k) { 10 | let left = 0, 11 | right = 0 12 | let maxCopy = 0 13 | let map = new Map() 14 | let arr = s.split('') 15 | 16 | arr.map((item) => { 17 | if (!map.has(item)) map.set(item, 0) 18 | map.set(item, map.get(item) + 1) 19 | maxCopy = Math.max(map.get(item), maxCopy) 20 | 21 | if (right - left + 1 - maxCopy > k) { 22 | map.set(arr[left], map.get(arr[left]) - 1) //向右移动 23 | left++ 24 | right++ 25 | } else { 26 | right++ //继续扩大窗口 27 | } 28 | }) 29 | return Math.max(maxCopy, right - left) 30 | } 31 | -------------------------------------------------------------------------------- /2.剑指Offer/DFS_深度遍历_√/35. 复杂链表的复制.js: -------------------------------------------------------------------------------- 1 | // 35. 复杂链表的复制 2 | /* 3 | 请实现 copyRandomList 函数,复制一个复杂链表。 4 | 在复杂链表中,每个节点除了有一个 next 指针指向下一个节点, 5 | 还有一个 random 指针指向链表中的任意节点或者 null。 6 | 7 | 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 8 | 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]] 9 | */ 10 | 11 | // ! 深度优先搜索 12 | 13 | function copyRandomList(head) { 14 | const visited = new Map() 15 | const dfs = (head) => { 16 | if (head === null) return null 17 | if (visited.has(head)) { 18 | return visited.get(head) 19 | } 20 | // 创建新结点 21 | let copy = new Node(head.val, null, null) 22 | visited.set(head, copy) 23 | copy.next = dfs(head.next) 24 | copy.random = dfs(head.random) 25 | return copy 26 | } 27 | return dfs(head) 28 | } 29 | -------------------------------------------------------------------------------- /3.Data Structure/11.基础_条件问题.js: -------------------------------------------------------------------------------- 1 | /* 2 | 为false的值 3 | 1、 "" 空的字符串 4 | 2、 为 0 的数字 5 | 3、 为 null 的对象 6 | 4、 为 undefined 的对象 7 | 5、 布尔值 false 8 | 6. NaN既不是true也不是false 9 | 7. undefined值既不是true也不是false 10 | 8. null既不是true也不是false 11 | 12 | 9. 判断a为非空元素, !!a即可 13 | */ 14 | // let a="" 15 | // let a=0 16 | // let a=undefined 17 | // let a=null 18 | // let a=NaN 19 | let a 20 | console.log(a==false); 21 | console.log(a==true); 22 | // !null==true 23 | // !undefined==true 24 | // !''==true 25 | 26 | const test=()=>{ 27 | let i=0; 28 | while(i<10){ 29 | if(i==2){ 30 | // return //跳出循环 31 | // i++ 32 | // continue //继续循环,但while的条件值必须有所改变 33 | break //跳出循环 34 | } 35 | console.log(i); 36 | i++ 37 | } 38 | } 39 | test() -------------------------------------------------------------------------------- /5.Daily Challenge/316. 去除重复字母.js: -------------------------------------------------------------------------------- 1 | // 316. 去除重复字母 2 | /* 3 | 给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。 4 | 需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 5 | 6 | 示例 1: 7 | 8 | 输入: "bcabc" 9 | 输出: "abc" 10 | 示例 2: 11 | 12 | 输入: "cbacdcbc" 13 | 输出: "acdb" 14 | 15 | */ 16 | 17 | const removeDuplicateLetters = function (s) { 18 | let stack = [] 19 | for (let i = 0; i < s.length; i++) { 20 | let char = s[i] 21 | if (stack.indexOf(char) > -1) continue 22 | while ( 23 | stack.length !== 0 && 24 | stack[stack.length - 1] > char && //stack最后一位大于当前字母 25 | s.indexOf(stack[stack.length - 1], i) > i //从s第i位开始查stack最后一位数字,确认还有的话才删除前面的字母 26 | ) { 27 | stack.pop() 28 | } 29 | stack.push(char) 30 | } 31 | return stack.join('') 32 | } 33 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/1.必备算法框架/队列实现栈.ts: -------------------------------------------------------------------------------- 1 | namespace QueueToStack { 2 | class MyStack { 3 | public queue: number[] 4 | constructor() { 5 | this.queue = [] 6 | } 7 | push = function (data: number) { 8 | queue.push(data) 9 | } 10 | pop = function () { 11 | let res = [] 12 | // 删除了栈顶元素 13 | for (let i = 0; i < this.queue.length - 1; i++) { 14 | res.push(this.queue[i]) 15 | } 16 | let r = this.queue[this.queue.length - 1] 17 | this.queue = res 18 | return r 19 | } 20 | top = function () { 21 | if (this.queue.length === 0) { 22 | return null 23 | } 24 | return this.queue[this.queue.length - 1] 25 | } 26 | empty = function () { 27 | return this.queue.length === 0 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/19.高频面试题/845. 数组中的最长山脉.js: -------------------------------------------------------------------------------- 1 | /* 2 | 输入:[2,1,4,7,3,2,5] 3 | 输出:5 4 | 解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。 5 | 示例 2: 6 | 7 | 输入:[2,2,2] 8 | 输出:0 9 | 解释:不含 “山脉”。 10 | 11 | */ 12 | 13 | function longestMountain(A){ 14 | const len=A.length; 15 | let left=0, right=0; 16 | let i=0; 17 | let res=0; 18 | while(iA[i]){ 21 | i++ 22 | right=Math.max(right,i) 23 | } 24 | // 山峰下降 25 | while(rightA[right+1]){ 26 | right++ 27 | } 28 | // 筛选长度 29 | if(i>left && i独一无二的出现次数 8 | */ 9 | 10 | var uniqueOccurrences = function (arr) { 11 | if (arr.length === 0) return true 12 | const memo = new Map() 13 | for (let val of arr) { 14 | if (!memo.has(val)) memo.set(val, 1) 15 | else { 16 | let temp = memo.get(val) 17 | memo.set(val, temp + 1) 18 | } 19 | } 20 | let arr1 = Array.from(memo.values()) 21 | console.log(arr1) 22 | let set = new Set(arr1) 23 | if (arr1.length === set.size) return true 24 | else return false 25 | } 26 | 27 | // console.log(uniqueOccurrences([1,2,2,1,1,3])); 28 | console.log(uniqueOccurrences([1, 2])) 29 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/10.回文系列/5.最长回文字符串.js: -------------------------------------------------------------------------------- 1 | /* 2 | 最长回文子串 3 | 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 4 | 5 | 示例 1: 6 | 7 | 输入: "babad" 8 | 输出: "bab" 9 | 注意: "aba" 也是一个有效答案。 10 | 示例 2: 11 | 12 | 输入: "cbbd" 13 | 输出: "bb" 14 | */ 15 | var longestPalindrome = function(s) { 16 | let res=''; 17 | // 有位数中奇偶的区别 18 | for(let i =0;is1.length? res: s1; 22 | res=res.length>s2.length? res: s2; 23 | } 24 | return res; 25 | }; 26 | 27 | function helper(s, l, r){ 28 | while(l>=0 && r 'Node': 15 | seen: set = set() 16 | while p: 17 | seen.add(p) 18 | p = p.parent 19 | while q: 20 | if q in seen: 21 | return q 22 | q = q.parent 23 | return None 24 | 25 | 26 | def say_hi(name: str) -> str: 27 | return f"hello,{name}" 28 | 29 | 30 | print(say_hi(name="labuladong")) -------------------------------------------------------------------------------- /4.Basic Challenge/25url加密解密.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | url加密解密 7 | 8 | 9 |
btoa() 等是JS的处理方法, new Buffer() 是node.js中的类
10 | 24 | 25 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/12.贪心算法/55. 跳跃游戏.js: -------------------------------------------------------------------------------- 1 | /* 2 | 输入: [2,3,1,1,4] 3 | 输出: true 4 | 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 5 | 示例 2: 6 | 7 | 输入: [3,2,1,0,4] 8 | 输出: false 9 | 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 10 | 所以你永远不可能到达最后一个位置。 11 | 12 | */ 13 | 14 | /* 15 | 每一步都计算一下从当前位置最远能够跳到哪里,然后和一个全局最优的最远位置 farthest 做对比, 16 | 通过每一步的最优解,更新全局最优解,这就是贪心 17 | 18 | */ 19 | 20 | function canJump(nums) { 21 | let n = nums.length; 22 | let farthest = 0; 23 | for (let i = 0; i < n - 1; i++) { 24 | // 不断计算能跳到的最远距离 25 | farthest = Math.max(farthest, i + nums[i]); 26 | // 可能碰到了 0,卡住跳不动了 27 | if (farthest <= i) return false; 28 | } 29 | return farthest >= n - 1; 30 | } 31 | console.log(canJump([2,5,0,0])); 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /5.Daily Challenge/1602. 找到二叉树中最近的右侧节点.js: -------------------------------------------------------------------------------- 1 | // 1602. 找到二叉树中最近的右侧节点 2 | /* 3 | 给定一棵二叉树的根节点 root 和树中的一个节点 u ,返回与 u 所在层中距离最近的右侧节点,当 u 是所在层中最右侧的节点,返回 null 。 4 | 5 | 输入: root = [1,2,3,null,4,5,6], u = 4 6 | 输出: 5 7 | 解释: 节点 4 所在层中,最近的右侧节点是节点 5。 8 | 9 | 输入: root = [3,null,4,2], u = 2 10 | 输出: null 11 | 解释: 2 的右侧没有节点。 12 | 13 | */ 14 | 15 | //BFS 16 | function findNearestRightNode(root, u) { 17 | let q = [root] 18 | while (q.length !== 0) { 19 | let size = q.length 20 | for (let i = 0; i < size; ++i) { 21 | let cur = q.shift() 22 | // 如果是该层最后一个节点,说明没有右侧节点了,则返回null; 23 | if (cur == u) return i === size - 1 ? null : q.shift() 24 | if (cur.left) q.push(cur.left) 25 | if (cur.right) q.push(cur.right) 26 | } 27 | } 28 | 29 | return null 30 | } 31 | -------------------------------------------------------------------------------- /1.算法框架_labuladong/16.图/二分图/277.搜索名人.ts: -------------------------------------------------------------------------------- 1 | // Forward declaration of the knows API. 2 | // https://mp.weixin.qq.com/s/hd06P3ASUAmA5apbAB1nIw 3 | /* 4 | 5 | 输入: graph = [ 6 | [1,1,0], 7 | [0,1,0], 8 | [1,1,1] 9 | ] 10 | 输出: 1 11 | */ 12 | // 图 算法 13 | // knows是一个函数, n是第i个人; 14 | namespace Leetcode277 { 15 | var solution = function (knows: any) { 16 | return function (n: number): number { 17 | let result = 0 18 | for (let i = 1; i < n; ++i) { 19 | if (knows(result, i)) { 20 | //a认识b? 21 | result = i 22 | } 23 | } 24 | for (let i = 0; i < n; ++i) { 25 | if (result == i) continue 26 | // 名人不认识某人,或者某人不认识名人,则-1 27 | if (knows(result, i) || !knows(i, result)) return -1 28 | } 29 | return result 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /2.剑指Offer/栈和队列_√/9用两个栈实现队列.js: -------------------------------------------------------------------------------- 1 | // 9用两个栈实现队列 2 | /* 3 | 用两个栈实现一个队列。队列的声明如下, 4 | 请实现它的两个函数 appendTail 和 deleteHead , 5 | 分别完成在队列尾部插入整数和在队列头部删除整数的功能。 6 | (若队列中没有元素,deleteHead 操作返回 -1 ) 7 | */ 8 | 9 | var CQueue = function () { 10 | this.stack1 = [] 11 | this.stack2 = [] 12 | } 13 | // stack1=[3,2,1];不断push进去,然后想删除头部的3,需要先倒置,再pop删除 14 | // stack2=[1,2,3], 然后pop最后一位即可. 15 | // 只要stack1为[],就直接return -1即可, 16 | CQueue.prototype.appendTail = function (value) { 17 | this.stack1.push(value) 18 | } 19 | CQueue.prototype.deleteHead = function () { 20 | if (this.stack2.length) { 21 | return this.stack2.pop() 22 | } 23 | if (!this.stack1.length) return -1 24 | while (this.stack1.length) { 25 | this.stack2.push(this.stack1.pop()) 26 | } 27 | return this.stack2.pop() 28 | } 29 | --------------------------------------------------------------------------------