- 从2月底开始找工作,到今天,经历了两个月的时间终于得到了百度和网易的offer。今年除去疫情影响的因素,春招难度确实很大。还要加强 代码能力 和 基础能力 。
- 剑指Offer 67题题解,C++版。从今天开始我会重新在做一遍,整理出完整的 题解思路 以及 AC代码 。
- 题解完成情况:0/67。剑指Offer
文章目录
- 一. 题目
- (1) 二维数组中的查找(数组)
- (2) 替换空格(字符串)
- (3) 从尾到头打印链表(链表)
- (4) 重建二叉树(树)
- (5) 用两个栈实现队列(栈和队列)
- (6) 旋转数组的最小数字(查找和排序)
- (7) 斐波那契数列(递归和循环)
- (8) 跳台阶(递归和循环)
- (9) 变态跳台阶(递归和循环)
- (10) 矩形覆盖(递归和循环)
- (11) 二进制中1的个数(位运算)
- (12) 数值的整数次方(代码的完整性)
- (13) 调整数组顺序使奇数位于偶数前面(代码的完整性)
- (14) 链表中倒数第k个结点(代码的鲁棒性)
- (15) 反转链表(代码的鲁棒性)
- (16) 合并两个排序的链表(代码的鲁棒性)
- (17) 树的子结构(代码的鲁棒性)
- (18) 二叉树的镜像(面试思路)
- (19) 顺时针打印矩阵(画图让抽象形象化)
- (20) 包含min函数的栈(举例让抽象具体化)
- (21) 栈的压入、弹出序列(举例让抽象具体化)
- (22) 从上往下打印二叉树(举例让抽象具体化)
- (23) 二叉搜索树的后序遍历序列(举例让抽象具体化)
- (24) 二叉树中和为某一值的路径(举例让抽象具体化)
- (25) 复杂链表的复制(分解让复杂问题简单)
- (26) 二叉搜索树与双向链表(分解让复杂问题简单)
- (27) 字符串的排列(分解让复杂问题简单)
- (28) 数组中出现次数超过一半的数字(时间效率)
- (29) 最小的K个数(时间效率)
- (30) 连续子数组的最大和(时间效率)
- (31) 整数中1出现的次数(从1到n整数中1出现的次数)(时间效率)
- (32) 把数组排成最小的数(时间效率)
- (33) 丑数(时间空间效率的平衡)
- (34) 第一个只出现一次的字符位置(时间空间效率的平衡)
- (35) 数组中的逆序对(时间空间效率的平衡)
- (36) 两个链表的第一个公共结点(时间空间效率的平衡)
- (37) 数字在排序数组中出现的次数(知识迁移能力)
- (38) 二叉树的深度(知识迁移能力)
- (39) 平衡二叉树(知识迁移能力)
- (40) 数组中只出现一次的数字(知识迁移能力)
- (41) 和为S的连续正数序列(知识迁移能力)
- (42) 和为S的两个数字(知识迁移能力)
- (43) 左旋转字符串(知识迁移能力)
- (44) 翻转单词顺序列(知识迁移能力)
- (45) 扑克牌顺子(抽象建模能力)
- (46) 孩子们的游戏(圆圈中最后剩下的数)(抽象建模能力)
- (47) 求1+2+3+...+n(发散思维能力)
- (48) 不用加减乘除做加法(发散思维能力)
- (49) 把字符串转换成整数(综合)
- (50) 数组中重复的数字(数组)
- (51) 构建乘积数组(数组)
- (52) 正则表达式匹配(字符串)
- (53) 表示数值的字符串(字符串)
- (54) 字符流中第一个不重复的字符(字符串)
- (55) 链表中环的入口结点(链表)
- (56) 删除链表中重复的结点(链表)
- (57) 二叉树的下一个结点(树)
- (58) 对称的二叉树(树)
- (59) 按之字形顺序打印二叉树(树)
- (60) 把二叉树打印成多行(树)
- (61) 序列化二叉树(树)
- (62) 二叉搜索树的第k个结点(树)
- (63) 数据流中的中位数(树)
- (64) 滑动窗口的最大值(栈和队列)
- (65) 矩阵中的路径(回溯法)
- (66) 机器人的运动范围(回溯法)
- (67) 剪绳子(动态规划与贪婪)
- 二. 更新日志
一. 题目
(1) 二维数组中的查找(数组)
题解:
从右上角开始,目标元素比当前元素小,向右边移动。目标元素比当前元素大,向下移动。
时间复杂度:O(n)
代码:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int x = 0;
int y = array[0].size()-1;
while(x<array.size()&&y>=0)
{
if(array[x][y]==target) return true;
if(array[x][y]>target) y--;
else x++;
}
return false;
}
};
还有两种做法:
- 分别是暴力遍历二维数组,时间复杂度:O(mn)。
- 二分 + 按行遍历 ,时间复杂度:O(nlogn)。
(2) 替换空格(字符串)
题解:纯模拟,无趣。
代码:无。
(3) 从尾到头打印链表(链表)
题解:
代码:
(4) 重建二叉树(树)
题解:
代码:
(5) 用两个栈实现队列(栈和队列)
题解:
代码:
(6) 旋转数组的最小数字(查找和排序)
题解:
代码:
(7) 斐波那契数列(递归和循环)
题解:
代码:
(8) 跳台阶(递归和循环)
题解:
代码:
(9) 变态跳台阶(递归和循环)
题解:
代码:
(10) 矩形覆盖(递归和循环)
题解:
代码:
(11) 二进制中1的个数(位运算)
题解:
代码:
(12) 数值的整数次方(代码的完整性)
题解:
代码:
(13) 调整数组顺序使奇数位于偶数前面(代码的完整性)
题解:
代码:
(14) 链表中倒数第k个结点(代码的鲁棒性)
题解:
代码:
(15) 反转链表(代码的鲁棒性)
题解:
代码:
(16) 合并两个排序的链表(代码的鲁棒性)
题解:
代码:
(17) 树的子结构(代码的鲁棒性)
题解:
代码:
(18) 二叉树的镜像(面试思路)
题解:
代码:
(19) 顺时针打印矩阵(画图让抽象形象化)
题解:
代码:
(20) 包含min函数的栈(举例让抽象具体化)
题解:
代码:
(21) 栈的压入、弹出序列(举例让抽象具体化)
题解:
代码:
(22) 从上往下打印二叉树(举例让抽象具体化)
题解:
代码:
(23) 二叉搜索树的后序遍历序列(举例让抽象具体化)
题解:
代码:
(24) 二叉树中和为某一值的路径(举例让抽象具体化)
题解:
代码:
(25) 复杂链表的复制(分解让复杂问题简单)
题解:
代码:
(26) 二叉搜索树与双向链表(分解让复杂问题简单)
题解:
代码:
(27) 字符串的排列(分解让复杂问题简单)
题解:
代码:
(28) 数组中出现次数超过一半的数字(时间效率)
题解:
代码:
(29) 最小的K个数(时间效率)
题解:
代码:
(30) 连续子数组的最大和(时间效率)
题解:
代码:
(31) 整数中1出现的次数(从1到n整数中1出现的次数)(时间效率)
题解:
代码:
(32) 把数组排成最小的数(时间效率)
题解:
代码:
(33) 丑数(时间空间效率的平衡)
题解:
代码:
(34) 第一个只出现一次的字符位置(时间空间效率的平衡)
题解:
代码:
(35) 数组中的逆序对(时间空间效率的平衡)
题解:
代码:
(36) 两个链表的第一个公共结点(时间空间效率的平衡)
题解:
代码:
(37) 数字在排序数组中出现的次数(知识迁移能力)
题解:
代码:
(38) 二叉树的深度(知识迁移能力)
题解:
代码:
(39) 平衡二叉树(知识迁移能力)
题解:
代码:
(40) 数组中只出现一次的数字(知识迁移能力)
题解:
代码:
(41) 和为S的连续正数序列(知识迁移能力)
题解:
代码:
(42) 和为S的两个数字(知识迁移能力)
题解:
代码:
(43) 左旋转字符串(知识迁移能力)
题解:
代码:
(44) 翻转单词顺序列(知识迁移能力)
题解:
代码:
(45) 扑克牌顺子(抽象建模能力)
题解:
代码:
(46) 孩子们的游戏(圆圈中最后剩下的数)(抽象建模能力)
题解:
代码:
(47) 求1+2+3+…+n(发散思维能力)
题解:
代码:
(48) 不用加减乘除做加法(发散思维能力)
题解:
代码:
(49) 把字符串转换成整数(综合)
题解:
代码:
(50) 数组中重复的数字(数组)
题解:
代码:
(51) 构建乘积数组(数组)
题解:
代码:
(52) 正则表达式匹配(字符串)
题解:
代码:
(53) 表示数值的字符串(字符串)
题解:
代码:
(54) 字符流中第一个不重复的字符(字符串)
题解:
代码:
(55) 链表中环的入口结点(链表)
题解:
代码:
(56) 删除链表中重复的结点(链表)
题解:
代码:
(57) 二叉树的下一个结点(树)
题解:
代码:
(58) 对称的二叉树(树)
题解:
代码:
(59) 按之字形顺序打印二叉树(树)
题解:
代码:
(60) 把二叉树打印成多行(树)
题解:
代码:
(61) 序列化二叉树(树)
题解:
代码:
(62) 二叉搜索树的第k个结点(树)
题解:
代码:
(63) 数据流中的中位数(树)
题解:
代码:
(64) 滑动窗口的最大值(栈和队列)
题解:
代码:
(65) 矩阵中的路径(回溯法)
题解:
代码:
(66) 机器人的运动范围(回溯法)
题解:
代码:
(67) 剪绳子(动态规划与贪婪)
题解:
代码:
二. 更新日志
- 5.4 使用爬虫,将目录整理出来。
- 5.18 害,拖延真的害死人,我本来想花费两天整理出来,但是由于到北京工作