通过刷题练习算法,包含两种语言 Python 和 C++ 的实现。其中题目描述在 Python 版本中。
如果在 C++ 版本没有看到解题思路,可以查看 Python 版本的解题思路。
| int2str | str2int | strcat | strcmp | strcpy | memcpy | strstr | swapInt |
|---|---|---|---|---|---|---|---|
| swapStr | strlen |
| 排序算法 | 平均 | 最好 | 最坏 | 空间复杂度 | 稳定性 | 实现 | 实现 | 适用的数据规模 |
|---|---|---|---|---|---|---|---|---|
| 直接插入 | n^2 | n | n^2 | 1 | 稳定 | Python | C++ | 少 |
| 希尔排序 | n^1.3 | n | n^2 | 1 | 不稳定 | Python | C++ | |
| 直接选择 | n^2 | n^2 | n^2 | 1 | 不稳定 | Python | C++ | 少 |
| 堆排序 | nlog2n | nlog2n | nlog2n | 1 | 不稳定 | C++ | 多 | |
| 冒泡排序 | n^2 | n | n^2 | 1 | 稳定 | Python | C++ | 少 |
| 快速排序 | nlog2n | nlog2n | n^2 | nlog2n | 不稳定 | Python | C++ | 多 |
| 归并排序 | nlog2n | nlog2n | nlog2n | n | 稳定 | Python | C++ | 多 |
| 数据结构 | 实现 | 实现 |
|---|---|---|
| 链表 | Python | C++ |
| 双向链表 | Python | C++ |
| 栈 | Python | C++ |
| 队列 | Python | C++ |
| 双向队列 | Python | |
| 循环队列 | Python | |
| 二叉树 | Python | |
| 二叉排序树 | C++ |
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 用两个栈实现队列 | 剑指-9 | Python | C++ | 1 | |
| 包含min函数的栈 | 剑指-30 | Python | C++ | 1 | |
| 栈的压入弹出序列 | 剑指-31 | Python | C++ | 2 |
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 反向打印链表 | 剑指-6 | Python | C++ | 1 | |
| 删除链表的结点 | 剑指-18 | Python | C++ | 1 | |
| 删除链表的重复结点 | 剑指-18扩展 | Python | C++ | 1 | |
| 链表的中间节点 | 力扣-876 | C++ | 快慢指针 | 1 | |
| 回文链表 | 力扣-234 | C++ | 快慢指针 | 2 | |
| 链表中倒数第k个节点 | 剑指-22 | Python | C++ | 快慢指针 | 2 |
| 链表中环的入口结点 | 剑指-23 | Python | C++ | 3 | |
| 反转链表 | 剑指-24 | Python | C++ | 2 | |
| 合并两个排序的链表 | 剑指-25 | Python | C++ | 1 | |
| 两数相加 | 力扣-2 | Python | C++ | 1 | |
| 两个列表的第一个公共结点 | 剑指-52 | Python | C++ | 快慢指针 | 2 |
| 对链表进行插入排序 | 力扣-147 | C++ | 3 |
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 重建二叉树 | 剑指-7 | Python | C++ | 2 | |
| 二叉树的下一个结点 | 剑指-8 | Python | 2 | ||
| 树的子结构 | 剑指-26 | Python | C++ | 2 | |
| 二叉树的镜像 | 剑指-27 | Python | C++ | 1 | |
| 对称二叉树 | 剑指-28 | Python | C++ | 1 | |
| 从上到下打印二叉树 | 剑指-32 | Python | C++ | 1 | |
| 把二叉树打印成多行 | 剑指-32扩展 | Python | C++ | 2 | |
| 按“之”字形打印二叉树 | 剑指-32扩展 | Python | C++ | 2 | |
| 二叉搜索树的后序遍历 | 剑指-33 | Python | 2 | ||
| 二叉树中和为某一值的路径 | 剑指-34 | Python | C++ | 2 | |
| 二叉搜索树与双向链表 | 剑指-36 | Python | 2 | ||
| 二叉搜索树的第k大节点 | 剑指-54 | Python | 树的遍历 | 2 | |
| 二叉树的深度 | 剑指-55 | Python | 递归 | 1 |
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 矩阵中的路径 | 剑指-12 | Python | 3 | ||
| 机器人的运动范围 | 剑指-13 | Python | C++ | 2 | |
| 岛屿数量 | 力扣-200 | Python | C++ | DFS,BFS,并查集 | 4 |
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 字符串的全排列 | 剑指-38 | Python | C++ | 2 | |
| 顺时针打印矩阵 | 剑指-29 | Python | 2 | ||
| 替换空格 | 剑指-5 | Python | 1 | ||
| 两数之和 | 力扣-1 | Python | C++ | 哈希 | 1 |
| 三数之和 | 力扣-15 | Python | C++ | 双指针 | 2 |
| 两数之和之数组有序 | 剑指-57,力扣-167 | Python | 双指针 | 1 | |
| 验证回文串 | 力扣-125 | Python | C++ | 双指针 | 1 |
| 删除排序数组中的重复项 | 力扣-26 | Python | C++ | 1 | |
| 实现strStr | 力扣-28 | Python | C++ | 1 | |
| 旋转图像 | 力扣-48 | Python | 1 | ||
| 加一 | 力扣-66 | Python | C++ | 1 | |
| 旋转数组 | 力扣-189 | Python | C++ | 1 | |
| 两个数组的交集 | 力扣-349 | Python | 1 | ||
| 两个数组的交集扩展 | 力扣-350 | Python | 1 | ||
| 字符串中的第一个唯一字符 | 力扣-387 | Python | C++ | 哈希 | 1 |
| 判断子序列 | 力扣-392 | Python | C++ | 1 | |
| 反转单词顺序 | 剑指-58 | Python | 1 | ||
| 左旋转字符串 | 剑指58-扩展 | Python | 1 | ||
| 最长公共前缀 | 力扣-14 | C++ | 1 | ||
| 寻找峰值 | 力扣-162 | C++ | 二分 | 1 | |
| 递增的三元子序列 | 力扣-334 | C++ | 2 | ||
| 跳跃游戏 | 力扣-55 | Python | C++ | 2 | |
| 根据身高重建队列 | 力扣-406 | C++ | 2 |
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 数组中重复的数字 | 剑指-3 | Python | C++ | ||
| 数组中重复的数字扩展 | 剑指3-扩展 | Python | |||
| 二维数组中的查找 | 剑指-4 | Python | C++ | ||
| 旋转数组的最小数字 | 剑指-11 | Python | |||
| 调整数组顺序使奇数在偶数前面 | 剑指-21 | Python | C++ | ||
| 数组中出现次数超过一半的数字 | 剑指-39 | Python | |||
| 最小的 k 个数 | 剑指-40 | Python | |||
| 搜索插入位置 | 力扣-35 | Python | C++ | 二分 | 1 |
| 颜色排序 | 力扣-75 | Python | C++ | 排序 | 2 |
| 摆动排序 | 力扣-324 | Python | C++ | 排序 | 2 |
【注】
子序列不要求连续,子串要求连续
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 剪绳子 | 剑指-14 | Python | C++ | 1 | |
| 连续子数组的最大和 | 剑指-42 | Python | C++ | 1 | |
| 连续子数组的最大积 | 力扣-152 | C++ | 2 | ||
| 01背包无价值 | 领扣-92 | Python | C++ | 1 | |
| 01背包有价值 | 领扣-125 | Python | C++ | 1 | |
| 完全背包 | 领扣 | Python | C++ | 1 | |
| 01背包返回方案数 | 领扣-563 | Python | C++ | 2 | |
| 完全背包返回方案数 | 领扣-562 | Python | C++ | 2 | |
| 买卖股票的最佳时机 | 力扣-121 | Python | C++ | 1 | |
| 买卖股票的最佳时机2 | 力扣-122 | Python | C++ | 1 | |
| 买卖股票的最佳时机3 | 力扣-123 | Python | C++ | 3 | |
| 最长回文子串 | 力扣-5 | Python | C++ | 3 | |
| 最长回文子序列 | 力扣-516 | C++ | 2 | ||
| 不同路径 | 力扣-62 | Python | C++ | 1 | |
| 最小路径和 | 剑指-47,力扣-64 | Python | C++ | 1 | |
| 交错字符串 | 力扣-97 | Python | 4 | ||
| 打家劫舍 | 力扣-198 | Python | C++ | 1 | |
| 零钱兑换 | 力扣-322 | Python | C++ | 完全背包变种 | 2 |
| 分割等和子集 | 力扣-416 | Python | C++ | 01背包变种 | 2 |
| 一和零 | 力扣-474 | Python | C++ | 多维01背包 | 3 |
| 目标和 | 力扣-494 | Python | C++ | 01背包变种 | 3 |
| 无重复字符的最长子串 | 剑指-48,力扣-3 | C++ | 3 | ||
| 最长上升子序列 | 力扣-300 | C++ | 1 | ||
| 最长公共子串 | 力扣-1143 | C++ | 2 |
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 二进制中1的个数 | 剑指-15 | Python | C++ | 位运算 | |
| 汉明距离 | 力扣-461 | 位运算 | |||
| 数值的整数次方 | 剑指-16 | Python | C++ | 递归 | |
| x的平方根 | 力扣-69 | Python | 二分 | ||
| 有效的完全平方数 | 力扣-367 | Python | |||
| 出现一次的数字 | 力扣-136 | Python | C++ | 位运算 | |
| 缺失数字 | 力扣-268 | 位运算 | |||
| 存在重复元素 | 力扣-217 | Python | C++ | ||
| 大数加法 |
| 题目 | 题目出处 | 实现 | 实现 | 知识点 | 难度 |
|---|---|---|---|---|---|
| 青蛙跳台阶 | 剑指-10 | Python | C++ | 数学 | 1 |
| 变态跳台阶 | 剑指-10扩展 | Python | C++ | 数学 | 1 |
| 矩阵覆盖 | 剑指-10扩展 | Python | 数学 | 1 | |
| 正则表达式匹配 | 剑指-19 | Python | C++ | 3 | |
| 表示数值的字符串 | 剑指-20 | Python | |||
| 把数组排列成最小的数 | 剑指-45 | Python | 3 | ||
| 有效数字 | 力扣-65 | Python | 有限状态机 | 3 | |
| 移动零 | 力扣-283 | Python | |||
| 猜数字大小 | 力扣-374 | Python | |||
| 朋友圈 | 力扣-547 | Python | 并查集 | 3 | |
| 丑数 | 剑指-49 | Python | C++ | 1 |