![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《剑指offer》
冯白丁
do it
展开
-
剑指offer(1)——C++实现二维数组中的查找
/*二维数组查找*/#include<iostream>#include<vector>using namespace std;class Solution {public: bool Find(int target, vector<vector<int> > array) { int rows = array.size(); i...原创 2019-08-04 21:29:23 · 170 阅读 · 0 评论 -
剑指offer(16)——C++实现两个链表合并
题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。考察点链表解题思路递归实现,比较每个节点大小,将较小的放入新链表非递归,原理同上完整代码/*16-合并两个链表*/#include<iostream>#include<queue>using namespace std;struct ListNod...原创 2019-08-22 15:40:08 · 1734 阅读 · 0 评论 -
剑指offer(13)——C++实现数组中奇数排在偶数前
题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。考察点数组解题思路最容易想到的是:新建一个数组,先循环一遍原数组找出奇数放入新数组,再循环一遍原数组,找出偶数放入新数组,最后将新数组赋给原数组。完整代码/*13-实现数组中奇数排在偶数前*/#inclu...原创 2019-08-17 19:35:34 · 653 阅读 · 0 评论 -
剑指offer(17)——C++实现判断树的子树
题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)考察点树、指针、递归解题思路二叉树的遍历常用递归实现。先从A的根节点开始判断,若相同再去判断A的左右子树节点。完整代码/*17-树的子结构*/#include<iostream>using namespace std;//树的创建struct TreeNode { ...原创 2019-08-22 20:22:08 · 456 阅读 · 0 评论 -
剑指offer(18)——C++实现二叉树镜像
题目操作给定的二叉树,将其变换为源二叉树的镜像考察点二叉树二叉树遍历解题思路分析本质就是左右节点的交换。先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子节点,当交换完所有的非叶子结点的左右子结点之后,就得到了树的镜像。完整代码/*18-二叉树的镜像*/#include<iostream>#include<stack>using...原创 2019-08-22 21:55:22 · 158 阅读 · 0 评论 -
剑指offer(20)——C++实现包含min函数的栈
题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。考察点栈解题思路首先要保证它始终是一个栈的结构,...原创 2019-08-23 15:39:19 · 189 阅读 · 0 评论 -
剑指offer(19)——C++实现顺时针打印矩阵
题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.考察点vector创建二维矩阵边界条件的考虑解题思路走一圈的流程可叙述为:第一步:从左到右压入元素。行保持...原创 2019-08-23 13:25:03 · 370 阅读 · 0 评论 -
剑指offer(21)——C++实现判断栈的压入、弹出序列
题目给定两个序列,判断第二个序列是否是第一个序列顺序压入时的弹出序列考察点栈 :栈规定的先入先出是指压入弹出的位置,而非元素压入弹出的时间解题思路添加一个辅助栈,顺序压入第一个序列元素,当栈顶元素与弹出序列的元素相同时,直接弹出,否知,一直压入,直至找到相同元素,若所元素压入完还为找到,即表示弹出序列不是压入序列的一种弹出方式。完整代码/*21-栈的压入、弹出序列*/#incl...原创 2019-08-26 16:16:51 · 208 阅读 · 0 评论 -
剑指offer(22)——C++实现从上到下打印二叉树
题目从上往下打印出二叉树的每个节点,同层节点从左至右打印。即按层遍历考察点二叉树遍历方式中的按层遍历 二叉树前中后三种遍历方式解题思路使用队列 使用队列存储一个节点的左右子节点,按照先进先出的思想,先出左再出右,当左出的时候,存储其左右子节点,右出的时候同理。完整代码/*22-从上到下打印二叉树*/#include<iostream>#include<ve...原创 2019-08-26 17:18:55 · 233 阅读 · 0 评论 -
剑指offer(23)——C++实现判断数组是否为二叉搜索树的后序遍历
题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。概念二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根...原创 2019-09-05 11:40:30 · 345 阅读 · 0 评论 -
剑指offer(12)——C++实现求解数值的整数次方
题目给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方考察点代码的完整性(写出来容易做细致难)对库函数的理解(库函数中pow函数用以实现乘方)解题思路很容易想到对base进行exponent次相乘,构造如下函数:double Power(double base, int exponent) { double r...原创 2019-08-17 16:13:05 · 187 阅读 · 0 评论 -
剑指offer(15)——C++实现反转单向链表
题目输入一个链表,反转链表后,输出新链表的表头。考察点链表、指针的编程能力思维的全面性和代码的鲁棒性解题思路避免链表断开后找不到后继节点,所以需要事先保存后继节点信息。设置三个指针,分别表示前继、当前、后继完整代码/*15-反转链表输出新链表头结点*/#include<iostream>using namespace std;struct ListNode...原创 2019-08-22 11:25:21 · 144 阅读 · 0 评论 -
剑指offer(11)——C++实现求解二进制中1的个数
题目输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。考察点二进制与位运算位运算:与(&)、或(|)、异或(^)、左移(<<)、右移(>>).左移(<<)规则:右边空出的位用0填补;高位左移溢出则舍弃该高位;计算机中常用补码表示数据。左移一位相当于乘以2.右移(>>)规则:左边空出的位用0或者1填补;正数用0填...原创 2019-08-16 18:58:38 · 270 阅读 · 0 评论 -
剑指offer(2)——C++实现替换空格
问题描述把字符串中每个空格用%20替换考察知识点字符串编程能力内存覆盖解题思路原字符串操作时,要考虑内存覆盖问题,即一个\0要被%,2,0三个字符替换。从后往前,遇到空格时,新字符串增加两个字符长度后用%20替换空格即可。完整C++代码/*02_replacespace*/#include<iostream>#include<string>usin...原创 2019-08-05 12:41:14 · 209 阅读 · 0 评论 -
剑指offer(3)——C++实现链表的反向输出
题目描述给定一个链表,反向输出。考察知识链表的创建以及常规操作栈的使用解题思路先进去的后输出,自然想到是栈的特点,故使用栈来实现。递归的本质也是栈。完整代码/*03_printlist*/#include<iostream>#include<vector>#include<stack>using namespace std; str...原创 2019-08-05 15:12:58 · 464 阅读 · 0 评论 -
剑指offer(4)——C++实现重建二叉树
题目给定二叉树的前序遍历和中序遍历结果,重建二叉树并输出头结点考查内容二叉树及其遍历的理解递归完整代码/*04_binarytree*/#include<iostream>#include<vector>using namespace std; struct TreeNode { int val; TreeNode *...原创 2019-08-05 18:22:30 · 117 阅读 · 0 评论 -
剑指offer(5)——C++实现两个栈完成队列的输入输出
题目两个栈实现队列的pop和push考察点队列与栈的概念解题思路stack1表示入队列,stack2表示出队列。完整代码/*05_stacktoqueue*/#include<iostream>#include<stack>using namespace std;class Solution{public: void push(int no...原创 2019-08-05 21:18:46 · 247 阅读 · 0 评论 -
剑指offer(14)——C++实现输出链表倒数第K个节点
题目输入一个链表,输出该链表中倒数第k个结点。考察点链表代码的鲁棒性解题思路一开始想法:遍历下链表,然后从后往前回溯K个节点,输出即可。但因给定链表为单链表,其节点只有从前往后的指针,故该想法行不通。输出倒数第K个节点,就是输出正数第N-K+1个,故先遍历一遍链表给出链表长度,再遍历到底n-k+1个节点,输出即可。只遍历一次的方法:设置两个指针,phead先走K-1步,然后p...原创 2019-08-19 18:39:19 · 430 阅读 · 0 评论 -
剑指offer(6)——C++实现查找旋转数组中的最小值
题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。考察点二分查找思考问题的全面性解题思路设定两个指针分别指向数组首尾,因为旋转不失一般性的会存在两个升序数组,找到这两个升序数组的分界点即可。完整代码/*06-查...原创 2019-08-15 14:09:17 · 201 阅读 · 0 评论 -
剑指offer(7)——C++实现菲波那切数列
题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。考察点菲波那切数列:f(x)={0,n=01,n=1f(n−1)+f(n−2),n>1f(x)=\left\{ \begin{aligned} &0, n=0 \\ &1, n=1 \\&f(n-1)+f(n-...原创 2019-08-15 17:48:54 · 459 阅读 · 0 评论 -
剑指offer(8)&(9)——C++实现青蛙跳台阶
题目正常跳:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。变态跳:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。考察点斐波那契数列参考剑指offer(7)递归的理解数学建模的能力解题思路正常跳:只有一个台阶时,只有一种跳法:n=1,...原创 2019-08-15 19:18:21 · 1244 阅读 · 0 评论 -
剑指offer(10)——C++实现矩形覆盖
题目我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?考察点数学模型建立的能力递归与菲波那切数列解题思路(1)1 * 3方块 覆 盖3n区域:f(n) = f(n-1) + f(n - 3), (n > 3)(2) 1 4 方块 覆 盖4n区域:f(n) = f(n-1) + f(n - 4),(n ...原创 2019-08-15 20:18:00 · 389 阅读 · 0 评论 -
剑指offer(24)——C++实现输出二叉树为某一值的所有路径
题目输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路从根节点开始,每遍历一个值就将其装入数组path中,当其到达叶节点并且和等于sum了就将路径压入reslut后,清空path,进行递归其左右节点。完整代码/*24-二叉树中和为...原创 2019-09-05 15:41:18 · 290 阅读 · 0 评论