- 博客(16)
- 收藏
- 关注
原创 [剑指offer]二叉树中序遍历的下一个节点c++
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解析中序遍历是左根右.所以,节点为空如果给定的节点有右孩子, 那么下一个节点就是右子树最左边的叶子.如果没有右孩子, 那么可分为两种情况:a. 是父亲的左孩子,那么父亲就是下一个节点b. 是父亲的右孩子, 那么一直往上找父亲,父亲的父亲…...
2020-03-21 23:41:26 231
原创 [剑指offer]数组中第一个重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解析class Solution {public: // Parameters: // n...
2020-03-21 23:08:18 170
原创 [剑指offer]对称二叉树的判断c++
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解析/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(...
2020-03-21 22:07:41 286
原创 【剑指offer】滑动窗口的最大值
题目给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1...
2020-03-21 21:39:45 124
原创 【剑指offer】和为S的连续正数序列C++
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。序...
2020-03-21 21:25:51 146
原创 【剑指offer】和为S的两个数
题目输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。分析最笨的方法,直接遍历。容易想到,但是复杂度高, O(n^2)class Solution {public: vector<int> FindNumbersWithSum(vect...
2020-03-21 20:56:56 81
原创 【剑指offer】判断平衡二叉树c++
题目输入一棵二叉树,判断该二叉树是否是平衡二叉树。分析平衡二叉树 定义,左右深度差不超过1.直接根据定义, 求出左子树深度,右子树深度,再判断是否深度差不超过1.class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(!pRoot) return true...
2020-03-21 19:48:58 216
原创 【剑指offer】二叉树的深度c++
题目输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解析直接递归class Solution {public: string PrintMinNumber(vector<int> numbers) { if(numbers.size() == 0) retu...
2020-03-21 12:57:01 177
原创 【剑指offer】把数组排成最小的数c++
题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析class Solution {public: string PrintMinNumber(vector<int> numbers) { if(numbers.size()...
2020-03-21 12:49:59 136
原创 【剑指offer】数组中出现次数超过一半的数字
题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。分析没啥好说的,直接上代码class Solution {public: int MoreThanHalfNum_Solution(vector<int> ...
2020-03-21 12:17:12 82
原创 【剑指offer】数组中只出现一次的数字
题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。解析根据位运算性质, 相同的数异或为0,不同为1.那么一组数中如果只有一个数只出现奇数次,其余均出现偶数次,则所有元素相异或,结果就是出现奇数次的数。同理, 这道题,假设只出现一次的两个数为A,B,则 全部异或之后结果为A异或B,AB不同,异或结果中必定有一位为1,那么找到这一位, 按照这一位...
2020-03-21 00:47:22 102
原创 【剑指offer】调整数组顺序使奇数位于左边偶数位于右边
题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析如果只是简单地讲奇数偶数分开的话,可直接使用快排的思想,一次遍历便可得到答案。但是此题教复杂,要求相对位置不变。1 使用辅助空间如果没有空间要求, 那么完全可以直接使用辅助空间分别存储奇数和偶数, 然后讲奇数放前面...
2020-03-19 22:00:15 448
原创 【剑指offer】二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析如果一个整数不为0,那么这个整数至少有一位是1。如果将这个整数减1,那么原来处在整数最右边的1(并不是最低位)就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。如:一个二进制数110,从右边数起第二位是处于最右边的一个1。减去1后,第二位变成0,它后面的0变成了...
2020-03-17 22:29:44 70
原创 【剑指offer】斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39分析斐波那契数列 满足 f(n)=f(n-1) + f(n-2);故直接使用迭代,效率比递归高class Solution {public: int Fibonacci(int n) { if(n < 0) ...
2020-03-17 21:19:19 105
原创 【剑指offer】二叉查找树中第k小的节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。题解:使用非递归中序遍历方式, 并计数/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int ...
2020-03-16 23:14:19 271
原创 博客firstday
杂话终于有自己的 博客了, 以前一直想弄博客, 但是由于各种懒,都不了了之。平时各种查资料,看各种大牛的博客,感慨万千。今天开通博客,为了记录,为了跟踪生活点滴!...
2020-03-15 22:46:29 82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人