C++ 基础算法、数据结构练习,包含 LeetCode 或其它算法练习记录。
此为个人练习仓库,代码中对重要思想进行了注释,会尽量补充解题思路。
每一道题都对应写有测试用例,但可能不够完整。如果您发现错误,欢迎给我留言,谢谢!
安装以下测试环境后,运行yarn start
可以自动从LeetCode获取代码函数和用例说明。保存文件后将自动同步到浏览器。
特别说明:题目截图仅为了方便在代码编辑器中直接预览从而优化编码体验,题目以LeetCode官方页面为准,题目著作权及其他权利以LeetCode官方说明为准或属于LeetCode。请大家尊重版权,共同维护良好网络环境。
如果你使用VSCode进行开发,那么可以安装CMake Tools、clangd和C++ TestMate以获得更好的单元测试体验。
注意,由于此项目使用LLVM,因此推荐使用与之对应的clangd插件,所以您不应当再安装C/C++插件。
以下是各个平台安装依赖的说明。
brew install cmake node zlib yarn llvm ninja
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc
echo 'export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"' >> ~/.zshrc
echo 'export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"' >> ~/.zshrc
安装完成后执行yarn
安装依赖。
在VSCode
的Cmake Tools
插件选择active kit
为Clang
。
参考https://apt.llvm.org/安装LLVM 16(clang-16)。
以Ubuntu Jammy (22.04) LTS为例,安装LLVM 16:
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key 2>/dev/null | sudo apt-key add -
sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main' -y
sudo apt-get update -q
sudo apt-get install -y clang-16 llvm-16 lld-16 libc++-16-dev libc++abi-16-dev clang-tools-16 clang-16-doc wasi-libc llvm-16-doc binutils ninja-build
sudo update-alternatives --config c++
wget https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-linux-x86_64.sh
sudo chmod +x cmake-3.23.2-linux-x86_64.sh
sudo ./cmake-3.23.2-linux-x86_64.sh --prefix=/usr
以Kali Rolling(Debian)为例,安装LLVM 16:
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key 2>/dev/null | sudo apt-key add -
sudo apt-key export AF4F7421|sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/llvm.gpg
sudo bash -c "echo 'deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/llvm.gpg] http://apt.llvm.org/unstable/ llvm-toolchain-16 main' >> /etc/apt/sources.list"
sudo apt-get update -y
sudo apt-get install -y clang-16 llvm-16 lld-16 libc++-16-dev libc++abi-16-dev clang-tools-16 clang-16-doc wasi-libc llvm-16-doc binutils ninja-build
sudo update-alternatives --config c++
执行最后一行命令后,提示选择C++编译器,选择clang++。
如果是Kali 2022之前的版本,需要加载对应版本的源,参考https://apt.llvm.org/进行配置。
根据https://nodejs.org/en/download/package-manager/安装Node.js环境。根据安装时的提示安装yarn
。
安装完成后执行yarn
安装依赖。
在VSCode
的Cmake Tools
插件选择active kit
为Clang
。
执行winget install CMake
安装最新版cmake
。
执行winget install Node.js
安装最新版node
。
执行winget install Ninja-build.Ninja
安装最新版ninja
。
安装LLVM
,方法一:
执行winget install --id LLVM.LLVM
安装最新版LLVM
,并将C:\Program Files\LLVM\bin
路径添加到系统Path
。
安装LLVM
,方法二:
安装 Visual Studio 2022,并在Visual Studio Installer
勾选使用C++的桌面开发
中的适用于Windows的C++ Clang工具
(15.0.1+)。
安装LLVM
后,在VSCode
的Cmake Tools
插件选择active kit
版本为Clang
,例如:Clang 16.0.1 x86_64-pc-windows-msvc
或Clang 15.0.1 (GNU CLI) for MSVC 17.5.33530.505
。或者手动执行的时候使用对应版本的llvm clang
。
需要特别注意的是,在Windows平台,Microsoft Visual Studio的MSVC标准库和LLVM的Clang标准库之间可能会产生冲突,需要根据具体情况进行调整。
上述安装完成后执行yarn
安装依赖。
Windows下中文乱码?
需要在 Windows 中设置使用 Unicode UTF-8 提供全球语言支持
,请按照以下步骤操作:
1. 打开“控制面板”。
2. 单击“时钟和区域”,然后单击“区域”。
3. 在“区域”窗口中,转到“管理”选项卡。
4. 单击“更改系统区域设置…”。
5. 在新弹出的“区域设置”窗口中,勾选“Beta 版:使用 Unicode UTF-8 提供全球语言支持(可能会影响与某些老应用程序的兼容性)”复选框。
6. 点击“确定”保存更改。系统可能需要重启以使更改生效。
已解决此问题,无论是否启用使用 Unicode UTF-8 提供全球语言支持
,均可展示正确的中文内容。请在测试资源管理器
中刷新测试
,查看TestMate C++
下的测试集,将会展示正确的中文内容。
排序算法 | 时间复杂度 (平均) | 时间复杂度 (最坏) | 时间复杂度 (最好) | 原地排序 | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|---|
插入排序 | (O(n^2)) | (O(n^2)) | (O(n)) | 是 | (O(1)) | 是 |
冒泡排序 | (O(n^2)) | (O(n^2)) | (O(n)) | 是 | (O(1)) | 是 |
选择排序 | (O(n^2)) | (O(n^2)) | (O(n^2)) | 是 | (O(1)) | 否 |
快速排序 | (O(n \log n)) | (O(n^2)) | (O(n \log n)) | 是 | (O(\log n)) | 否 |
归并排序 | (O(n \log n)) | (O(n \log n)) | (O(n \log n)) | 否 | (O(n)) | 是 |
堆排序 | (O(n \log n)) | (O(n \log n)) | (O(n \log n)) | 是 | (O(1)) | 否 |
C++标准库提供的数据结构实在是太多了,参考C++标准库头文件,仅列举常见的:
-
构造限制重复的字符串 [贪心, 字符串, 计数, 堆(优先队列)]
- LeetCode 2182. 构造限制重复的字符串 https://leetcode.cn/problems/construct-string-with-repeat-limit
-
统计重复个数 [字符串, 动态规划]
- LeetCode 466. 统计重复个数 https://leetcode.cn/problems/count-the-repetitions
-
字典序最小回文串 [贪心, 双指针, 字符串]
- LeetCode 2697. 字典序最小回文串 https://leetcode.cn/problems/lexicographically-smallest-palindrome
-
子串能表示从 1 到 N 数字的二进制串 [字符串]
- LeetCode 1016. 子串能表示从 1 到 N 数字的二进制串 https://leetcode.cn/problems/binary-string-with-substrings-representing-1-to-n
-
有效时间的数目 [字符串, 枚举]
- LeetCode 2437. 有效时间的数目 https://leetcode.cn/problems/number-of-valid-clock-times
-
数青蛙 [字符串, 计数]
- LeetCode 1419. 数青蛙 https://leetcode.cn/problems/minimum-number-of-frogs-croaking
-
按字典序排在最后的子串 [双指针, 字符串]
- LeetCode 1163. 按字典序排在最后的子串 https://leetcode.cn/problems/last-substring-in-lexicographical-order
-
段式回文 [贪心, 双指针, 字符串, 动态规划, 哈希函数, 滚动哈希]
- LeetCode 1147. 段式回文 https://leetcode.cn/problems/longest-chunked-palindrome-decomposition
-
隐藏个人信息 [字符串]
- LeetCode 831. 隐藏个人信息 https://leetcode.cn/problems/masking-personal-information
-
检查二进制字符串字段 [字符串]
- LeetCode 1784. 检查二进制字符串字段 https://leetcode.cn/problems/check-if-binary-string-has-at-most-one-segment-of-ones/
-
在LR字符串中交换相邻字符 [双指针, 字符串]
- LeetCode 777. 在LR字符串中交换相邻字符 https://leetcode.cn/problems/swap-adjacent-in-lr-string
-
重新排列单词间的空格 [字符串]
- LeetCode 1592. 重新排列单词间的空格 https://leetcode.cn/problems/rearrange-spaces-between-words
-
数组中的字符串匹配 [字符串, 字符串匹配]
- LeetCode 1408. 数组中的字符串匹配 https://leetcode.cn/problems/string-matching-in-an-array
-
使循环数组所有元素相等的最少秒数 [数组, 哈希表]
- LeetCode 2808. 使循环数组所有元素相等的最少秒数 https://leetcode.cn/problems/minimum-seconds-to-equalize-a-circular-array
-
最长交替子数组 [数组, 枚举]
- LeetCode 2765. 最长交替子数组 https://leetcode.cn/problems/longest-alternating-subarray
-
分割数组的最大值 [贪心, 数组, 二分查找, 动态规划, 前缀和]
- LeetCode 410. 分割数组的最大值 https://leetcode.cn/problems/split-array-largest-sum
-
按分隔符拆分字符串 [数组, 字符串]
- LeetCode 2788. 按分隔符拆分字符串 https://leetcode.cn/problems/split-strings-by-separator
-
最大字符串配对数目 [数组, 哈希表, 字符串, 模拟]
- LeetCode 2744. 最大字符串配对数目 https://leetcode.cn/problems/find-maximum-number-of-string-pairs
-
统计出现过一次的公共字符串 [数组, 哈希表, 字符串, 计数]
- LeetCode 2085. 统计出现过一次的公共字符串 https://leetcode.cn/problems/count-common-words-with-one-occurrence
-
回旋镖的数量 [数组, 哈希表, 数学]
- LeetCode 447. 回旋镖的数量 https://leetcode.cn/problems/number-of-boomerangs
-
经营摩天轮的最大利润 [数组, 模拟]
- LeetCode 1599. 经营摩天轮的最大利润 https://leetcode.cn/problems/maximum-profit-of-operating-a-centennial-wheel
-
使用最小花费爬楼梯 [数组, 动态规划]
- LeetCode 746. 使用最小花费爬楼梯 https://leetcode.cn/problems/min-cost-climbing-stairs
-
用邮票贴满网格图 [贪心, 数组, 矩阵, 前缀和]
- LeetCode 2132. 用邮票贴满网格图 https://leetcode.cn/problems/stamping-the-grid
-
可获得的最大点数 [数组, 前缀和, 滑动窗口]
- LeetCode 1423. 可获得的最大点数 https://leetcode.cn/problems/maximum-points-you-can-obtain-from-cards
-
找出叠涂元素 [数组, 哈希表, 矩阵]
- LeetCode 2661. 找出叠涂元素 https://leetcode.cn/problems/first-completely-painted-row-or-column
-
打家劫舍 [数组, 动态规划]
- LeetCode 198. 打家劫舍 https://leetcode.cn/problems/house-robber
-
二进制字符串前缀一致的次数 [数组]
- LeetCode 1375. 二进制字符串前缀一致的次数 https://leetcode.cn/problems/number-of-times-binary-string-is-prefix-aligned
-
数组中不等三元组的数目 [数组, 哈希表]
- LeetCode 2475. 数组中不等三元组的数目 https://leetcode.cn/problems/number-of-unequal-triplets-in-array
-
相等行列对 [数组, 哈希表, 矩阵, 模拟]
- LeetCode 2352. 相等行列对 https://leetcode.cn/problems/equal-row-and-column-pairs
-
对数组执行操作 [数组, 模拟]
- LeetCode 2460. 对数组执行操作 https://leetcode.cn/problems/apply-operations-to-an-array
-
统计范围内的元音字符串数 [数组, 字符串, 前缀和]
- LeetCode 2559. 统计范围内的元音字符串数 https://leetcode.cn/problems/count-vowel-strings-in-ranges
-
可被三整除的偶数的平均值 [数组, 数学]
- LeetCode 2455. 可被三整除的偶数的平均值 https://leetcode.cn/problems/average-value-of-even-numbers-that-are-divisible-by-three
-
有序矩阵中的第 k 个最小数组和 [数组, 二分查找, 矩阵, 堆(优先队列)]
- LeetCode 1439. 有序矩阵中的第 k 个最小数组和 https://leetcode.cn/problems/find-the-kth-smallest-sum-of-a-matrix-with-sorted-rows
-
大样本统计 [数组, 数学, 概率与统计]
- LeetCode 1093. 大样本统计 https://leetcode.cn/problems/statistics-from-a-large-sample
-
差值数组不同的字符串 [数组, 哈希表, 字符串]
- LeetCode 2451. 差值数组不同的字符串 https://leetcode.cn/problems/odd-string-difference/
-
蓄水 [贪心, 数组, 堆(优先队列)]
- LeetCode LCP 33. 蓄水 https://leetcode.cn/problems/o8SXZn
-
负二进制数相加 [数组, 数学]
- LeetCode 1073. 负二进制数相加 https://leetcode.cn/problems/adding-two-negabinary-numbers
-
判断两个事件是否存在冲突 [数组, 字符串]
- LeetCode 2446. 判断两个事件是否存在冲突 https://leetcode.cn/problems/determine-if-two-events-have-conflict
-
工作计划的最低难度 [数组, 动态规划]
- LeetCode 1335. 工作计划的最低难度 https://leetcode.cn/problems/minimum-difficulty-of-a-job-schedule
-
按列翻转得到最大值等行数 [数组, 哈希表, 矩阵]
- LeetCode 1072. 按列翻转得到最大值等行数 https://leetcode.cn/problems/flip-columns-for-maximum-number-of-equal-rows
-
翻转子数组得到最大的数组值 [贪心, 数组, 数学]
- LeetCode 1330. 翻转子数组得到最大的数组值 https://leetcode.cn/problems/reverse-subarray-to-maximize-array-value
-
总持续时间可被 60 整除的歌曲 [数组, 哈希表, 计数]
- LeetCode 1010. 总持续时间可被 60 整除的歌曲 https://leetcode.cn/problems/pairs-of-songs-with-total-durations-divisible-by-60
-
处理用时最长的那个任务的员工 [数组]
- LeetCode 2432. 处理用时最长的那个任务的员工 https://leetcode.cn/problems/the-employee-that-worked-on-the-longest-task
-
摘水果 [数组, 二分查找, 前缀和, 滑动窗口]
- LeetCode 2106. 摘水果 https://leetcode.cn/problems/maximum-fruits-harvested-after-at-most-k-steps
-
最长字符串链 [数组, 哈希表, 双指针, 字符串, 动态规划]
- LeetCode 1048. 最长字符串链 https://leetcode.cn/problems/longest-string-chain
-
两个非重叠子数组的最大和 [数组, 动态规划, 滑动窗口]
- LeetCode 1031. 两个非重叠子数组的最大和 https://leetcode.cn/problems/maximum-sum-of-two-non-overlapping-subarrays
-
填充书架 [数组, 动态规划]
- LeetCode 1105. 填充书架 https://leetcode.cn/problems/filling-bookcase-shelves
-
最长等差数列 [数组, 哈希表, 二分查找, 动态规划]
- LeetCode 1027. 最长等差数列 https://leetcode.cn/problems/longest-arithmetic-subsequence
-
分隔数组以得到最大和 [数组, 动态规划]
- LeetCode 1043. 分隔数组以得到最大和 https://leetcode.cn/problems/partition-array-for-maximum-sum
-
子数组中占绝大多数的元素 [设计, 树状数组, 线段树, 数组, 二分查找]
- LeetCode 1157. 子数组中占绝大多数的元素 https://leetcode.cn/problems/online-majority-element-in-subarray
-
出现最频繁的偶数元素 [数组, 哈希表, 计数]
- LeetCode 2404. 出现最频繁的偶数元素 https://leetcode.cn/problems/most-frequent-even-element
-
检查相同字母间的距离 [数组, 哈希表, 字符串]
- LeetCode 2399. 检查相同字母间的距离 https://leetcode.cn/problems/check-distances-between-same-letters
-
合并石头的最低成本 [数组, 动态规划]
- LeetCode 1000. 合并石头的最低成本 https://leetcode.cn/problems/minimum-cost-to-merge-stones
-
交换一次的先前排列 [贪心, 数组]
- LeetCode 1053. 交换一次的先前排列 https://leetcode.cn/problems/previous-permutation-with-one-swap
-
多边形三角剖分的最低得分 [数组, 动态规划]
- LeetCode 1039. 多边形三角剖分的最低得分 https://leetcode.cn/problems/minimum-score-triangulation-of-polygon
-
算术三元组的数目 [数组, 哈希表, 双指针, 枚举]
- LeetCode 2367. 算术三元组的数目 https://leetcode.cn/problems/number-of-arithmetic-triplets
-
和相等的子数组 [数组, 哈希表]
- LeetCode 2395. 和相等的子数组 https://leetcode.cn/problems/find-subarrays-with-equal-sum
-
字符串中的第一个唯一字符 [队列, 哈希表, 字符串, 计数]
- LeetCode 387. 字符串中的第一个唯一字符 https://leetcode.cn/problems/first-unique-character-in-a-string/
-
矩阵置零 [数组, 哈希表, 矩阵]
- LeetCode 73. 矩阵置零 https://leetcode.cn/problems/set-matrix-zeroes
-
杨辉三角 [数组, 动态规划]
- LeetCode 118. 杨辉三角 https://leetcode.cn/problems/pascals-triangle
-
重塑矩阵 [数组, 矩阵, 模拟]
- LeetCode 566. 重塑矩阵 https://leetcode.cn/problems/reshape-the-matrix/
-
买卖股票的最佳时机 [数组, 动态规划]
- LeetCode 121. 买卖股票的最佳时机 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/
-
删除某些元素后的数组均值 [数组, 排序]
- LeetCode 1619. 删除某些元素后的数组均值 https://leetcode.cn/problems/mean-of-array-after-removing-some-elements/
-
特殊数组的特征值 [数组, 二分查找, 排序]
- LeetCode 1608. 特殊数组的特征值 https://leetcode.cn/problems/special-array-with-x-elements-greater-than-or-equal-x
-
优美的排列 II [数组, 数学]
- LeetCode 667. 优美的排列 II https://leetcode.cn/problems/beautiful-arrangement-ii
-
最长数对链 [贪心, 数组, 动态规划, 排序]
- LeetCode 646. 最长数对链 https://leetcode.cn/problems/maximum-length-of-pair-chain
-
通过翻转子数组使两个数组相等 [数组, 哈希表, 排序]
- LeetCode 1460. 通过翻转子数组使两个数组相等 https://leetcode.cn/problems/make-two-arrays-equal-by-reversing-sub-arrays
-
逐步求和得到正数的最小值 [数组, 前缀和]
- LeetCode 1413. 逐步求和得到正数的最小值 https://leetcode.cn/problems/minimum-value-to-get-positive-step-by-step-sum
-
数组序号转换 [数组, 哈希表, 排序]
- LeetCode 1331. 数组序号转换 https://leetcode.cn/problems/rank-transform-of-an-array
-
数据流中的移动平均值 [设计, 队列, 数组, 数据流]
- LeetCode 346. 数据流中的移动平均值 https://leetcode.cn/problems/moving-average-from-data-stream/
- LeetCode 剑指 Offer II 041. 滑动窗口的平均值 https://leetcode.cn/problems/qIsx9U/
-
摘樱桃 [数组, 动态规划, 矩阵]
- LeetCode 741. 摘樱桃 https://leetcode.cn/problems/cherry-pickup
-
最长的斐波那契子序列的长度 [数组, 哈希表, 动态规划]
- LeetCode 873. 最长的斐波那契子序列的长度 https://leetcode.cn/problems/length-of-longest-fibonacci-subsequence
-
玩筹码 [贪心, 数组, 数学]
- LeetCode 1217. 玩筹码 https://leetcode.cn/problems/minimum-cost-to-move-chips-to-the-same-position
-
删除子串后的字符串最小长度 [栈, 字符串, 模拟]
- LeetCode 2696. 删除子串后的字符串最小长度 https://leetcode.cn/problems/minimum-string-length-after-removing-substrings
-
队列中可以看到的人数 [栈, 数组, 单调栈]
- LeetCode 1944. 队列中可以看到的人数 https://leetcode.cn/problems/number-of-visible-people-in-a-queue
-
从链表中移除节点 [栈, 递归, 链表, 单调栈]
- LeetCode 2487. 从链表中移除节点 https://leetcode.cn/problems/remove-nodes-from-linked-list
-
两数相加 II [栈, 链表, 数学]
- LeetCode 445. 两数相加 II https://leetcode.cn/problems/add-two-numbers-ii
-
叶值的最小代价生成树 [栈, 贪心, 数组, 动态规划, 单调栈]
- LeetCode 1130. 叶值的最小代价生成树 https://leetcode.cn/problems/minimum-cost-tree-from-leaf-values
-
检查替换后的词是否有效 [栈, 字符串]
- LeetCode 1003. 检查替换后的词是否有效 https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions
-
餐盘栈 [栈, 设计, 哈希表, 堆(优先队列)]
- LeetCode 1172. 餐盘栈 https://leetcode.cn/problems/dinner-plate-stacks
-
链表中的下一个更大节点 [栈, 数组, 链表, 单调栈]
- LeetCode 1019. 链表中的下一个更大节点 https://leetcode.cn/problems/next-greater-node-in-linked-list
-
用栈实现队列 [栈, 设计, 队列]
- LeetCode 232. 用栈实现队列 https://leetcode.cn/problems/implement-queue-using-stacks/
-
文件夹操作日志搜集器 [栈, 数组, 字符串]
- LeetCode 1598. 文件夹操作日志搜集器 https://leetcode.cn/problems/crawler-log-folder
-
最长有效括号 [栈, 字符串, 动态规划]
- LeetCode 32. 最长有效括号 https://leetcode.cn/problems/longest-valid-parentheses/
-
字符串中的额外字符 [字典树, 数组, 哈希表, 字符串, 动态规划]
- LeetCode 2707. 字符串中的额外字符 https://leetcode.cn/problems/extra-characters-in-a-string
-
从二叉搜索树到更大和树 [树, 深度优先搜索, 二叉搜索树, 二叉树]
- LeetCode 1038. 从二叉搜索树到更大和树 https://leetcode.cn/problems/binary-search-tree-to-greater-sum-tree
-
树节点的第 K 个祖先 [树, 深度优先搜索, 广度优先搜索, 设计, 二分查找, 动态规划]
- LeetCode 1483. 树节点的第 K 个祖先 https://leetcode.cn/problems/kth-ancestor-of-a-tree-node
-
删点成林 [树, 深度优先搜索, 数组, 哈希表, 二叉树]
- LeetCode 1110. 删点成林 https://leetcode.cn/problems/delete-nodes-and-return-forest
-
根到叶路径上的不足节点 [树, 深度优先搜索, 二叉树]
- LeetCode 1080. 根到叶路径上的不足节点 https://leetcode.cn/problems/insufficient-nodes-in-root-to-leaf-paths
-
二叉搜索子树的最大键值和 [树, 深度优先搜索, 二叉搜索树, 动态规划, 二叉树]
- LeetCode 1373. 二叉搜索子树的最大键值和 https://leetcode.cn/problems/maximum-sum-bst-in-binary-tree
-
通知所有员工所需的时间 [树, 深度优先搜索, 广度优先搜索]
- LeetCode 1376. 通知所有员工所需的时间 https://leetcode.cn/problems/time-needed-to-inform-all-employees
-
节点与其祖先之间的最大差值 [树, 深度优先搜索, 二叉树]
- LeetCode 1026. 节点与其祖先之间的最大差值 https://leetcode.cn/problems/maximum-difference-between-node-and-ancestor
-
驼峰式匹配 [字典树, 双指针, 字符串, 字符串匹配]
- LeetCode 1023. 驼峰式匹配 https://leetcode.cn/problems/camelcase-matching
-
二叉搜索树的最近公共祖先 [树, 深度优先搜索, 二叉搜索树, 二叉树]
- LeetCode 235. 二叉搜索树的最近公共祖先 https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/
-
两数之和 IV [树, 深度优先搜索, 广度优先搜索, 二叉搜索树, 哈希表, 双指针, 二叉树]
- LeetCode 653. 两数之和 IV https://leetcode.cn/problems/two-sum-iv-input-is-a-bst/
-
验证二叉搜索树 [树, 深度优先搜索, 二叉搜索树, 二叉树]
- LeetCode 98. 验证二叉搜索树 https://leetcode.cn/problems/validate-binary-search-tree/
-
二叉搜索树中的插入操作 [树, 二叉搜索树, 二叉树]
- LeetCode 701. 二叉搜索树中的插入操作 https://leetcode.cn/problems/insert-into-a-binary-search-tree/
-
二叉搜索树中的搜索 [树, 二叉搜索树, 二叉树]
- LeetCode 700. 二叉搜索树中的搜索 https://leetcode.cn/problems/search-in-a-binary-search-tree/
-
路径总和 [树, 深度优先搜索, 广度优先搜索, 二叉树]
- LeetCode 112. 路径总和 https://leetcode.cn/problems/path-sum/
-
翻转二叉树 [树, 深度优先搜索, 广度优先搜索, 二叉树]
- LeetCode 226. 翻转二叉树 https://leetcode.cn/problems/invert-binary-tree/
-
二叉树的最大深度 [树, 深度优先搜索, 广度优先搜索, 二叉树]
- LeetCode 104. 二叉树的最大深度 https://leetcode.cn/problems/maximum-depth-of-binary-tree/
-
寻找重复的子树 [树, 深度优先搜索, 哈希表, 二叉树]
- LeetCode 652. 寻找重复的子树 https://leetcode.cn/problems/find-duplicate-subtrees
-
二叉树最大宽度 [树, 深度优先搜索, 广度优先搜索, 二叉树]
- LeetCode 662. 二叉树最大宽度 https://leetcode.cn/problems/maximum-width-of-binary-tree
-
最大层内元素和 [树, 深度优先搜索, 广度优先搜索, 二叉树]
- LeetCode 1161. 最大层内元素和 https://leetcode.cn/problems/maximum-level-sum-of-a-binary-tree
-
完全二叉树插入器 [树, 广度优先搜索, 设计, 二叉树]
- LeetCode 919. 完全二叉树插入器 https://leetcode.cn/problems/complete-binary-tree-inserter
-
实现一个魔法字典 [设计, 字典树, 哈希表, 字符串]
- LeetCode 676. 实现一个魔法字典 https://leetcode.cn/problems/implement-magic-dictionary
-
单词替换 [字典树, 数组, 哈希表, 字符串]
- LeetCode 648. 单词替换 https://leetcode.cn/problems/replace-words
-
在链表中插入最大公约数 [链表, 数学, 数论]
- LeetCode 2807. 在链表中插入最大公约数 https://leetcode.cn/problems/insert-greatest-common-divisors-in-linked-list
-
从链表中删去总和值为零的连续节点 [哈希表, 链表]
- LeetCode 1171. 从链表中删去总和值为零的连续节点 https://leetcode.cn/problems/remove-zero-sum-consecutive-nodes-from-linked-list
-
删除链表中的节点 [链表]
- LeetCode 237. 删除链表中的节点 https://leetcode.cn/problems/delete-node-in-a-linked-list/
-
删除排序链表中的重复元素 [链表]
- LeetCode 83. 删除排序链表中的重复元素 https://leetcode.cn/problems/remove-duplicates-from-sorted-list/
-
删除排序链表中的重复元素 II [链表, 双指针]
- LeetCode 82. 删除排序链表中的重复元素 II https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/
-
移除链表元素 [递归, 链表]
- LeetCode 203. 移除链表元素 https://leetcode.cn/problems/remove-linked-list-elements/
-
两两交换链表中的节点 [递归, 链表]
- LeetCode 24. 两两交换链表中的节点 https://leetcode.cn/problems/swap-nodes-in-pairs/
-
重新规划路线 [深度优先搜索, 广度优先搜索, 图]
- LeetCode 1466. 重新规划路线 https://leetcode.cn/problems/reorder-routes-to-make-all-paths-lead-to-the-city-zero
-
最小化旅行的价格总和 [树, 深度优先搜索, 图, 数组, 动态规划]
- LeetCode 2646. 最小化旅行的价格总和 https://leetcode.cn/problems/minimize-the-total-price-of-the-trips
-
到达首都的最少油耗 [树, 深度优先搜索, 广度优先搜索, 图]
- LeetCode 2477. 到达首都的最少油耗 https://leetcode.cn/problems/minimum-fuel-cost-to-report-to-the-capital
-
T 秒后青蛙的位置 [树, 深度优先搜索, 广度优先搜索, 图]
- LeetCode 1377. T 秒后青蛙的位置 https://leetcode.cn/problems/frog-position-after-t-seconds/
-
不邻接植花 [深度优先搜索, 广度优先搜索, 图]
- LeetCode 1042. 不邻接植花 https://leetcode.cn/problems/flower-planting-with-no-adjacent
-
找到小镇的法官 [图, 数组, 哈希表]
- LeetCode 997. 找到小镇的法官 https://leetcode.cn/problems/find-the-town-judge
-
拿出最少数目的魔法豆 [数组, 前缀和, 排序]
- LeetCode 2171. 拿出最少数目的魔法豆 https://leetcode.cn/problems/removing-minimum-number-of-magic-beans
-
购买两块巧克力 [数组, 排序]
- LeetCode 2706. 购买两块巧克力 https://leetcode.cn/problems/buy-two-chocolates
-
下一个更大元素 IV [栈, 数组, 二分查找, 排序, 单调栈, 堆(优先队列)]
- LeetCode 2454. 下一个更大元素 IV https://leetcode.cn/problems/next-greater-element-iv
-
出租车的最大盈利 [数组, 二分查找, 动态规划, 排序]
- LeetCode 2008. 出租车的最大盈利 https://leetcode.cn/problems/maximum-earnings-from-taxi
-
拼车 [数组, 前缀和, 排序, 模拟, 堆(优先队列)]
- LeetCode 1094. 拼车 https://leetcode.cn/problems/car-pooling
-
可被三整除的最大和 [贪心, 数组, 动态规划, 排序]
- LeetCode 1262. 可被三整除的最大和 https://leetcode.cn/problems/greatest-sum-divisible-by-three
-
比较字符串最小字母出现频次 [数组, 哈希表, 字符串, 二分查找, 排序]
- LeetCode 1170. 比较字符串最小字母出现频次 https://leetcode.cn/problems/compare-strings-by-frequency-of-the-smallest-character
-
老鼠和奶酪 [贪心, 数组, 排序, 堆(优先队列)]
- LeetCode 2611. 老鼠和奶酪 https://leetcode.cn/problems/mice-and-cheese
-
不同的平均值数目 [数组, 哈希表, 双指针, 排序]
- LeetCode 2465. 不同的平均值数目 https://leetcode.cn/problems/number-of-distinct-averages
-
礼盒的最大甜蜜度 [数组, 二分查找, 排序]
- LeetCode 2517. 礼盒的最大甜蜜度 https://leetcode.cn/problems/maximum-tastiness-of-candy-basket
-
受标签影响的最大值 [贪心, 数组, 哈希表, 计数, 排序]
- LeetCode 1090. 受标签影响的最大值 https://leetcode.cn/problems/largest-values-from-labels
-
距离相等的条形码 [贪心, 数组, 哈希表, 计数, 排序, 堆(优先队列)]
- LeetCode 1054. 距离相等的条形码 https://leetcode.cn/problems/distant-barcodes
-
与对应负数同时存在的最大正整数 [数组, 哈希表, 双指针, 排序]
- LeetCode 2441. 与对应负数同时存在的最大正整数 https://leetcode.cn/problems/largest-positive-integer-that-exists-with-its-negative
-
按身高排序 [数组, 哈希表, 字符串, 排序]
- LeetCode 2418. 按身高排序 https://leetcode.cn/problems/sort-the-people
-
使数组严格递增 [数组, 二分查找, 动态规划, 排序]
- LeetCode 1187. 使数组严格递增 https://leetcode.cn/problems/make-array-strictly-increasing
-
移动石子直到连续 II [数组, 数学, 双指针, 排序]
- LeetCode 1040. 移动石子直到连续 II https://leetcode.cn/problems/moving-stones-until-consecutive-ii
-
两点之间不包含任何点的最宽垂直区域 [数组, 排序]
- LeetCode 1637. 两点之间不包含任何点的最宽垂直区域 https://leetcode.cn/problems/widest-vertical-area-between-two-points-containing-no-points
-
合并两个有序链表 [递归, 链表]
- LeetCode 21. 合并两个有序链表 https://leetcode.cn/problems/merge-two-sorted-lists/
-
自由之路 [深度优先搜索, 广度优先搜索, 字符串, 动态规划]
- LeetCode 514. 自由之路 https://leetcode.cn/problems/freedom-trail
-
构造有效字符串的最少插入数 [Stack, Greedy, String, Dynamic Programming]
- LeetCode 2645. 构造有效字符串的最少插入数 https://leetcode.cn/problems/minimum-additions-to-make-valid-string
-
最小体力消耗路径 [深度优先搜索, 广度优先搜索, 并查集, 数组, 二分查找, 矩阵, 堆(优先队列)]
- LeetCode 1631. 最小体力消耗路径 https://leetcode.cn/problems/path-with-minimum-effort
-
爬楼梯 [记忆化搜索, 数学, 动态规划]
- LeetCode 70. 爬楼梯 https://leetcode.cn/problems/climbing-stairs
-
水域大小 [深度优先搜索, 广度优先搜索, 并查集, 数组, 矩阵]
- LeetCode 面试题 16.19. 水域大小 https://leetcode.cn/problems/pond-sizes-lcci
-
黑白翻转棋 [广度优先搜索, 数组, 矩阵]
- LeetCode LCP 41. 黑白翻转棋 https://leetcode.cn/problems/fHi6rV
-
统计封闭岛屿的数目 [深度优先搜索, 广度优先搜索, 并查集, 数组, 矩阵]
- LeetCode 1254. 统计封闭岛屿的数目 https://leetcode.cn/problems/number-of-closed-islands
-
铺瓷砖 [动态规划, 回溯]
- LeetCode 1240. 铺瓷砖 https://leetcode.cn/problems/tiling-a-rectangle-with-the-fewest-squares
-
单字符重复子串的最大长度 [哈希表, 字符串, 滑动窗口]
- LeetCode 1156. 单字符重复子串的最大长度 https://leetcode.cn/problems/swap-for-longest-repeated-character-substring
-
二进制矩阵中的最短路径 [广度优先搜索, 数组, 矩阵]
- LeetCode 1091. 二进制矩阵中的最短路径 https://leetcode.cn/problems/shortest-path-in-binary-matrix/
-
活字印刷 [哈希表, 字符串, 回溯, 计数]
- LeetCode 1079. 活字印刷 https://leetcode.cn/problems/letter-tile-possibilities
-
可被 K 整除的最小整数 [哈希表, 数学]
- LeetCode 1015. 可被 K 整除的最小整数 https://leetcode.cn/problems/smallest-integer-divisible-by-k
-
推箱子 [广度优先搜索, 数组, 矩阵, 堆(优先队列)]
-
强整数 [哈希表, 数学]
- LeetCode 970. 强整数 https://leetcode.cn/problems/powerful-integers
-
删除字符使频率相同 [哈希表, 字符串, 计数]
- LeetCode 2423. 删除字符使频率相同 https://leetcode.cn/problems/remove-letter-to-equalize-frequency
-
第一个出现两次的字母 [哈希表, 字符串, 计数]
- LeetCode 2351. 第一个出现两次的字母 https://leetcode.cn/problems/first-letter-to-appear-twice
-
赎金信 [哈希表, 字符串, 计数]
- LeetCode 383. 赎金信 https://leetcode.cn/problems/ransom-note/
-
最大人工岛 [深度优先搜索, 广度优先搜索, 并查集, 数组, 矩阵]
- LeetCode 827. 最大人工岛 https://leetcode.cn/problems/making-a-large-island
-
分数加减运算 [数学, 字符串, 模拟]
- LeetCode 592. 分数加减运算 https://leetcode.cn/problems/fraction-addition-and-subtraction
-
最大交换 [贪心, 数学]
- LeetCode 670. 最大交换 https://leetcode.cn/problems/maximum-swap/
-
字符串相加 [数学, 字符串, 模拟]
- LeetCode 415. 字符串相加 https://leetcode.cn/problems/add-strings/
-
旋转数字 [数学, 动态规划]
- LeetCode 788. 旋转数字 https://leetcode.cn/problems/rotated-digits
-
统计字典序元音字符串的数目 [数学, 动态规划, 组合数学]
- LeetCode 1641. 统计字典序元音字符串的数目 https://leetcode.cn/problems/count-sorted-vowel-strings
-
公因子的数目 [数学, 枚举, 数论]
- LeetCode 2427. 公因子的数目 https://leetcode.cn/problems/number-of-common-factors
-
负二进制转换 [数学]
- LeetCode 1017. 负二进制转换 https://leetcode.cn/problems/convert-to-base-2
-
最小的必要团队 [位运算, 数组, 动态规划, 状态压缩]
- LeetCode 1125. 最小的必要团队 https://leetcode.cn/problems/smallest-sufficient-team
-
困于环中的机器人 [数学, 字符串, 模拟]
- LeetCode 1041. 困于环中的机器人 https://leetcode.cn/problems/robot-bounded-in-circle
-
统计共同度过的日子数 [数学, 字符串]
- LeetCode 2409. 统计共同度过的日子数 https://leetcode.cn/problems/count-days-spent-together
-
最小偶倍数 [数学, 数论]
- LeetCode 2413. 最小偶倍数 https://leetcode.cn/problems/smallest-even-multiple
-
分割圆的最少切割次数 [几何, 数学]
- LeetCode 2481. 分割圆的最少切割次数 https://leetcode.cn/problems/minimum-cuts-to-divide-a-circle
-
构建回文串检测 [位运算, 数组, 哈希表, 字符串, 前缀和]
- LeetCode 1177. 构建回文串检测 https://leetcode.cn/problems/can-make-palindrome-from-substring
-
连通两组点的最小成本 [位运算, 数组, 动态规划, 状态压缩, 矩阵]
- LeetCode 1595. 连通两组点的最小成本 https://leetcode.cn/problems/minimum-cost-to-connect-two-groups-of-points
-
最大化网格幸福感 [位运算, 记忆化搜索, 动态规划, 状态压缩]
- LeetCode 1659. 最大化网格幸福感 https://leetcode.cn/problems/maximize-grid-happiness
-
圆和矩形是否有重叠 [几何, 数学]
- LeetCode 1401. 圆和矩形是否有重叠 https://leetcode.cn/problems/circle-and-rectangle-overlapping
-
找出中枢整数 [数学, 前缀和]
- LeetCode 2485. 找出中枢整数 https://leetcode.cn/problems/find-the-pivot-integer
-
下一个更大的数值平衡数 [数学, 回溯, 枚举]
- LeetCode 2048. 下一个更大的数值平衡数 https://leetcode.cn/problems/next-greater-numerically-balanced-number
-
不浪费原料的汉堡制作方案 [数学]
- LeetCode 1276. 不浪费原料的汉堡制作方案 https://leetcode.cn/problems/number-of-burgers-with-no-waste-of-ingredients
-
参加考试的最大学生数 [位运算, 数组, 动态规划, 状态压缩, 矩阵]
- LeetCode 1349. 参加考试的最大学生数 https://leetcode.cn/problems/maximum-students-taking-exam
-
一周中的第几天 [数学]
- LeetCode 1185. 一周中的第几天 https://leetcode.cn/problems/day-of-the-week
-
被列覆盖的最多行数 [位运算, 数组, 回溯, 枚举, 矩阵]
- LeetCode 2397. 被列覆盖的最多行数 https://leetcode.cn/problems/maximum-rows-covered-by-columns
-
统计整数数目 [数学, 字符串, 动态规划]
- LeetCode 2719. 统计整数数目 https://leetcode.cn/problems/count-of-integers