记录数据结构和leetCode算法题 数据结构 sparsearray 稀疏数组 singlequeue 数组模拟队列 circelqueue 数组模拟环形队列 singlequeue 单向链表 doublelink 双向链表 circlesinglelink 环形链表 josephu 约瑟夫环 bubblesort 冒泡排序 selectsort 选择排序 insertsort 插入排序 quicksort 快速排序 mergeSort 归并排序 stack 栈 quickPower 快速幂模板 quickMul 快速乘模板 leetCode maximumProduct 628. 三个数的最大乘积 numEquivDominoPairs 1128. 等价多米诺骨牌对的数量 pivotIndex 724. 寻找数组的中心索引 minimumEffortPath 1631. 最小体力消耗路径(并查集) fairCandySwap 888. 公平的糖果棒交换 fairCandySwap 665. 非递减数列 checkInclusion 567. 字符串的排列 matrixReshape 566. 重塑矩阵 getRow 119. 杨辉三角 II longestOnes 1004. 最大连续1的个数 III findShortestSubArray 697. 数组的度 longestSubarray 1438. 绝对差不超过限制的最长连续子数组 isToeplitzMatrix 766. 托普利茨矩阵 maxSatisfied 1052. 爱生气的书店老板 oddEvenList 328. 奇偶链表 decodeString 394. 字符串解码 flipAndInvertImage 832. 翻转图像 climbStairs 70. 爬楼梯 transpose 867. 转置矩阵 longestSubstring 395. 至少有 K 个重复字符的最长子串 isMonotonic 896. 单调数列 longestPalindrome 409. 最长回文串 longestPalindromeSubstring 5. 最长回文子串 maxSumSubmatrix 363. 矩形区域不超过 K 的最大数值和(朴素解法) NumMatrix 338. 比特位计数 MyQueue 232. 用栈实现队列 nextGreaterElements 503. 下一个更大元素 II(单调栈) partition 131. 分割回文串 minCut 131. 分割回文串 wordBreak 139. 单词拆分(动态规划) removeDuplicates 1047. 删除字符串中的所有相邻重复项(用切片模拟栈) calculate 224. 基本计算器 (栈应用) calculate2 227. 基本计算器 II (栈应用) clumsy 1006. 笨阶乘 (栈应用) isValidSerialization 331. 验证二叉树的前序序列化 (栈应用) MyHashSet 705. 设计哈希集合 MyHashMap 706. 设计哈希映射 spiralOrder 54. 螺旋矩阵 generateMatrix 59. 螺旋矩阵 II reverseBetween 92. 反转链表 II(头插法) evalRPN 150. 逆波兰表达式求值(栈) setZeroes 73. 矩阵置零(原地算法 o(1)空间) hammingWeight 191. 位1的个数(&运算) NestedIterator 341. 扁平化嵌套列表迭代器(栈、队列) find132pattern 456. 132 模式(栈) deleteDuplicates 83. 删除排序链表中的重复元素 deleteDuplicates1 82. 删除排序链表中的重复元素 II hasCycle 141. 环形链表(快慢指针,自删,字典,反转链表再比较) splitListToParts 725. 分隔链表(均分) Trie 208. 实现 Trie (前缀树) rotateRight 61. 旋转链表(闭合成环) BSTIterator 173. 二叉搜索树迭代器(中序遍历,栈) inorderTraversal 94. 二叉树的中序遍历(递归、栈迭代、莫里斯) increasingBST 897. 递增顺序搜索树(中序遍历) rangeSumBST 938. 二叉搜索树的范围和(中序遍历) minDiffInBST 783. 二叉搜索树节点最小距离(递归、栈迭代、莫里斯) isCousins 993. 二叉树的堂兄弟节点(递归、栈迭代) leafSimilar 872. 叶子相似的树(递归、栈迭代) reverseBits 190. 颠倒二进制位(分治算法、逐位分离) searchMatrix 74. 搜索二维矩阵 subsets 78. 子集(回溯) subsetsWithDup 90. 子集 II(回溯+剪枝) combinationSum 39. 组合总和(回溯+剪枝) combinationSum2 40. 组合总和 II(回溯+剪枝) permute 46. 全排列(回溯+剪枝) permuteUnique 47. 全排列 II(回溯+剪枝) minimumTimeRequired 1723. 完成所有工作的最短时间(回溯、递归) longestCommonSubsequence 1143. 最长公共子序列(动态规划) minDistance 583. 两个字符串的删除操作(动态规划) rob 198. 打家劫舍(动态规划) rob 213. 打家劫舍 II(动态规划) isScramble 87. 扰乱字符串(动态规划 3维) numDecodings 91. 解码方法(动态规划) largestDivisibleSubset 368. 最大整除子集(动态规划) combinationSum4 377. 组合总和 Ⅳ(动态规划) canCross 403. 青蛙过河(动态规划) lengthOfLIS 300. 最长递增子序列(动态规划+二分) numWays 1269. 停在原地的方案数(动态规划) numRabbits 781. 森林中的兔子(贪心算法) merge 88. 合并两个有序数组(双指针) removeDuplicates1 26. 删除有序数组中的重复项(双指针) removeElement 27. 移除元素(双指针、交换移除、通用解法) removeDuplicates2 80. 删除有序数组中的重复项 II(双指针) purchasePlans LCP 28. 采购方案(双指针) compareVersion 165. 比较版本号(双指针、字符串模拟) maxFrequency 5739. 最高频元素的频数(双指针、滑动窗口) findLongestWord 524. 通过删除字母匹配到字典里最长单词(双指针+排序+贪心) longestBeautifulSubstring 5740. 所有元音按顺序排布的最长子字符串(滑动窗口) search1 33. 搜索旋转排序数组(二分法) search2 81. 搜索旋转排序数组 II(二分法) findMin 153. 寻找旋转排序数组中的最小值(二分法) findMin2 154. 寻找旋转排序数组中的最小值 II(二分法) searchRange 34. 在排序数组中查找元素的第一个和最后一个位置(二分法) divide 29. 两数相除(二分法) shipWithinDays 1011. 在 D 天内送达包裹的能力(二分法) search 704. 二分查找(二分法) peakIndexInMountainArray 852. 山脉数组的峰顶索引(二分法) findPeakElement 162. 寻找峰值(二分法) isUgly 263. 丑数(朴素解法) nthUglyNumber 264. 丑数 II(三指针) storeWater LCP 33. 蓄水(模拟法) findTheWinner 5727. 找出游戏的获胜者(约瑟夫环、模拟、公式) minSideJumps 5728. 最少侧跳次数(动态规划) largestNumber 179. 最大数(排序) containsDuplicate 217. 存在重复元素(排序) containsNearbyDuplicate 219. 存在重复元素 II(滑动窗口、维护一个大小为k的set) containsNearbyAlmostDuplicate 220. 存在重复元素 III(滑动窗口 & 二分,桶排序) getMaximumXor 5719. 每个查询的最大异或值(异或) getXORSum 5737. 所有数对按位与结果的异或和(异或) decode 1720. 解码异或后的数组(异或) xorOperation 1486. 数组异或操作(异或、数学) decode1 1734. 解码异或后的排列(异或) xorQueries 1310. 子数组异或查询(异或、前缀和、树状数组) corpFlightBookings 1109. 航班预订统计(前缀和) NumArray 303. 区域和检索 - 数组不可变(前缀和) NumMatrix 304. 二维区域和检索 - 矩阵不可变(前缀和) countTriplets 1442. 形成两个异或相等数组的三元组数目(异或) getOrder 5736. 单线程 CPU(优先队列) strStr 28. 实现 strStr()(朴素解法、KMP) judgeSquareSum 633. 平方数之和(数学) rand10 470. 用 Rand7() 实现 Rand10()(拒绝采样) balancedStringSplit 1221. 分割平衡字符串(贪心) maxArea 11. 盛最多水的容器(贪心) jump 45. 跳跃游戏 II(贪心) numberOfBoomerangs 447. 回旋镖的数量(哈希表) checkValidString 678. 有效的括号字符串(动态规划+模拟) chalkReplacer 1894. 找到需要补充粉笔的学生编号(前缀和、模拟) isValidSudoku 36. 有效的数独(数组) lengthOfLastWord 58. 最后一个单词的长度(字符串) isPowerOfThree 326. 3的幂(数学) getSum 371. 两整数之和(位运算) 程序员面试金典(第 6 版) isUnique 面试题 01.01 判定字符是否唯一 CheckPermutation 面试题 01.02. 判定是否互为字符重排 replaceSpaces 面试题 01.03. URL化 search 面试题 10.03. 搜索旋转数组(二分法) smallestK 面试题 17.14. 最小K个数(大小根堆、快速选择、排序) massage 面试题 17.16. 按摩师 trap 面试题 17.21. 直方图的水量(单调栈、面积差值、双指针) 剑指 Offer(第 2 版) findNumberIn2DArray 剑指 Offer 04. 二维数组中的查找 reversePrint 剑指 Offer 06. 从尾到头打印链表 buildTree 剑指 Offer 07. 重建二叉树 CQueue 剑指 Offer 09. 用两个栈实现队列 minArray 剑指 Offer 11. 旋转数组的最小数字 exist 剑指 Offer 12. 矩阵中的路径 movingCount 剑指 Offer 13. 机器人的运动范围(dfs,bfs) cuttingRope 剑指 Offer 14- I. 剪绳子 cuttingRope 剑指 Offer 14- II. 剪绳子 II(快速幂算法) hammingWeight 剑指 Offer 15. 二进制中1的个数(与运算技巧) myPow 剑指 Offer 16. 数值的整数次方(快速幂算法) printNumbers 剑指 Offer 17. 打印从1到最大的n位数(大数全排列解法) deleteNode 剑指 Offer 18. 删除链表的节点(双指针) isMatch 剑指 Offer 19. 正则表达式匹配(动态规划) exchange 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(双指针、快慢指针) getKthFromEnd 剑指 Offer 22. 链表中倒数第k个节点(快慢指针) reverseList 剑指 Offer 24. 反转链表(快慢指针、递归) mergeTwoLists 剑指 Offer 25. 合并两个排序的链表(假头、递归) isSubStructure 剑指 Offer 26. 树的子结构(递归) mirrorTree 剑指 Offer 27. 二叉树的镜像(栈、递归) isSymmetric 剑指 Offer 28. 对称的二叉树(递归、bfs) spiralOrder 剑指 Offer 29. 顺时针打印矩阵 MinStack 剑指 Offer 30. 包含min函数的栈(栈) validateStackSequences 剑指 Offer 31. 栈的压入、弹出序列(栈) levelOrder 剑指 Offer 32 - I. 从上到下打印二叉树(BFS、队列) levelOrder2 剑指 Offer 32 - II. 从上到下打印二叉树 II(BFS、DFS) levelOrder3 剑指 Offer 32 - III. 从上到下打印二叉树 III(BFS、DFS) verifyPostorder 剑指 Offer 33. 二叉搜索树的后序遍历序列(递归、单调栈) pathSum 剑指 Offer 34. 二叉树中和为某一值的路径(回溯法) copyRandomList 剑指 Offer 35. 复杂链表的复制(map,原地复制) treeToDoublyList 剑指 Offer 36. 二叉搜索树与双向链表(dfs) serialize 剑指 Offer 37. 序列化二叉树(层序遍历、找规律) permutation 剑指 Offer 38. 字符串的排列(回溯算法) majorityElement 剑指 Offer 39. 数组中出现次数超过一半的数字(摩尔投票,字典,排序) getLeastNumbers 剑指 Offer 40. 最小的k个数(最大堆,快速选择) MedianFinder 剑指 Offer 41. 数据流中的中位数(最大堆、最小堆) maxSubArray 剑指 Offer 42. 连续子数组的最大和(动态规划) countDigitOne 剑指 Offer 43. 1~n 整数中 1 出现的次数(数学) findNthDigit 剑指 Offer 44. 数字序列中某一位的数字(数学) minNumber 剑指 Offer 45. 把数组排成最小的数(自定义排序) translateNum 剑指 Offer 46. 把数字翻译成字符串(动态规划) maxValue 剑指 Offer 47. 礼物的最大价值(动态规划) lengthOfLongestSubstring 剑指 Offer 48. 最长不含重复字符的子字符串(滑动窗口) nthUglyNumber 剑指 Offer 49. 丑数(三指针) firstUniqChar 剑指 Offer 50. 第一个只出现一次的字符(hash表、有序hash表) reversePairs 剑指 Offer 51. 数组中的逆序对(分治算法、归并排序) getIntersectionNode 剑指 Offer 52. 两个链表的第一个公共节点(链表) search 剑指 Offer 53 - I. 在排序数组中查找数字 I(俩次二分) missingNumber 剑指 Offer 53 - II. 0~n-1中缺失的数字(二分法) kthLargest 剑指 Offer 54. 二叉搜索树的第k大节点(中序遍历+提前返回) maxDepth 剑指 Offer 55 - I. 二叉树的深度(层序遍历、后序遍历) isBalanced 剑指 Offer 55 - II. 平衡二叉树(深度优先搜索) singleNumbers 剑指 Offer 56 - I. 数组中数字出现的次数(异或) singleNumber 剑指 Offer 56 - II. 数组中数字出现的次数 II(位运算) twoSum 剑指 Offer 57. 和为s的两个数字(双指针) findContinuousSequence 剑指 Offer 57 - II. 和为s的连续正数序列(双指针) reverseWords 剑指 Offer 58 - I. 翻转单词顺序(双指针) reverseLeftWords 剑指 Offer 58 - II. 左旋转字符串(api) maxSlidingWindow 剑指 Offer 59 - I. 滑动窗口的最大值(单调队列) MaxQueue 剑指 Offer 59 - II. 队列的最大值(单调双向队列) dicesProbability 剑指 Offer 60. n个骰子的点数(动态规划) isStraight 剑指 Offer 61. 扑克牌中的顺子(集合 Set / 排序) lastRemaining 剑指 Offer 62. 圆圈中最后剩下的数字(数学 / 动态规划) maxProfit 剑指 Offer 63. 股票的最大利润(动态规划) sumNums 剑指 Offer 64. 求1+2+…+n(递归、数学公式) add 剑指 Offer 65. 不用加减乘除做加法(位运算) constructArr 剑指 Offer 66. 构建乘积数组(两次dp) strToInt 剑指 Offer 67. 把字符串转换成整数(数字越界处理) lowestCommonAncestor 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(迭代、递归) lowestCommonAncestor2 剑指 Offer 68 - II. 二叉树的最近公共祖先(DFS)