![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
DigitalNexus
这个作者很懒,什么都没留下…
展开
-
【剑指offer】面试题55:二叉树的深度/二叉平衡树【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:题目一:二叉树的深度 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 树的节点的定义为:struct TreeNode { int val; treeNode *left;...原创 2018-08-27 17:21:28 · 585 阅读 · 1 评论 -
【剑指offer】面试题64:求1+2+...+n【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:求1+2+…+n求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字即条件判断语句(A?B:C)(A?B:C)(A?B:C)。解题思路:1.可以使用类的构造函数来解决,这个方法可以好好看看,因为很多小细节。比如使用类名来调...原创 2018-08-29 17:07:24 · 634 阅读 · 0 评论 -
【剑指offer】面试题65:不用加减乘除做加法【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除四则运算符。解题思路:1.不能用四则运算那就使用位运算。 2.按照《剑指offer》上面的方法分三步分析:第一步各位相加但是不计进位,两个1和两个0相加的结果都为0,1和0相加的结果为1,这里可以...原创 2018-08-29 18:11:27 · 312 阅读 · 0 评论 -
【剑指offer】面试题66:构建乘积数组【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:构建乘积数组给定一个数组A[0,1,...,n−1]A[0,1,...,n−1]A[0,1,...,n-1],请构建一个数组B[0,1,...,n−1]B[0,1,...,n−1]B[0,1,...,n-1],其中BBB的元素B[i]B[i]B[i] = A[0]∗A[1]∗......原创 2018-08-29 20:37:34 · 455 阅读 · 0 评论 -
【剑指offer】面试题4:二维数组中的查找【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。。解题思路:1.目标数为T,从二维数组的最右上角开始查找,如果T比该数字小,说明T比该数...原创 2018-09-07 19:28:52 · 569 阅读 · 0 评论 -
【剑指offer】面试题5:替换空格【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:替换空格请实现一个函数,把字符串中的每个空格替换成“%20”,例如,输入”We are happy.”,则输出”We%20are%20happy.”。解题思路:本题主要考察对字符串的处理 一般像这种需要向后扩充容量重新整理内存的,最好能够考虑到从尾部开始整理的方法 1...原创 2018-09-07 19:57:44 · 775 阅读 · 0 评论 -
【剑指offer】面试题6:从尾到头打印链表【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:从尾到头打印链表输入一个链表的头节点,从尾到头反过来打印出每个节点的值。链表节点定义如下:struct ListNode { int val; struct ListNode *next; ListNode(int x) : ...原创 2018-09-08 16:39:50 · 618 阅读 · 0 评论 -
【剑指offer】面试题7:重建二叉树【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树(假设没有重复数字)。树节点定义如下:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(in...原创 2018-09-08 17:46:15 · 1912 阅读 · 0 评论 -
【剑指offer】面试题8:二叉树的下一个节点【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:二叉树的下一个节点给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了指向左右子树的指针,还有一个指向父节点的指针。树节点定义如下:struct TreeLinkNode { int val; struct TreeLinkNode...原创 2018-09-08 21:19:06 · 640 阅读 · 0 评论 -
【剑指offer】面试题9:用两个栈实现队列【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个成员函数,分别完成在队列尾部插入节点和在队列的头部删除节点class solution{public: void push(int node); int pop();private: ...原创 2018-09-08 21:38:36 · 530 阅读 · 0 评论 -
【剑指offer】面试题10:斐波那契数列【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:斐波那契数列求斐波那契数列的第n项。斐波那契数列的定义如下:f(0) = 0;f(1) = 1;f(n) = f(n - 1) + f(n - 2); n >= 2解题思路:1.使用递归的方法是最简单的,但是效率成问题,有很多重复的计算。其实就是一种自顶向下的...原创 2018-09-08 22:13:35 · 721 阅读 · 0 评论 -
【剑指offer】面试题2:单例模式【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:实现singleton模式设计一个类,我们只能生成该类的一个实例。解题思路:1.这个题《剑指offer》上面使用的是C#来解答,这里给出一种C++的解答方式,和原书中的解法三比较相似。实现单例模式【C++版本】//注意到实现中m_pInstance和GetInsta...原创 2018-09-06 17:52:10 · 911 阅读 · 0 评论 -
【剑指offer】面试题54:二叉搜索树的第K大节点【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:给定一棵二叉搜索树,请找出其中第K大的节点。 树的节点的定义为:struct treeNode { int val; treeNode *left; treeNode *right; treeNode(int x) :val...原创 2018-08-24 20:06:14 · 2116 阅读 · 1 评论 -
【剑指offer】面试题63:股票的最大利润【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:股票的最大利润假设把某股票的价格按照时间先后顺序储存在数组中,请问买卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们能在价格为5的时候买入并在价格为16的时候卖出,则能收获最大的利润11。解题思路:...原创 2018-08-28 23:08:59 · 1655 阅读 · 2 评论 -
【剑指offer】面试题56:数组中数字出现的次数【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:数组中只出现一次的两个数字一个整形数组中除了两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。解题思路:1.注意到时间复杂度是O(n)而空间复杂度是O(1)。 2.看到这种出现偶数次数的情况,都可以考虑...原创 2018-08-27 20:20:37 · 836 阅读 · 0 评论 -
【剑指offer】面试题51:数组中的逆序对【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如在数组{7,5,6,4}中,一共存在5个逆序对。解题思路:1.强解的复杂度太高了。 2.使用二分的思路来求解。具体解题思路见书可以AC的解法【C++...原创 2018-08-23 21:29:17 · 1204 阅读 · 1 评论 -
【剑指offer】面试题52:两个链表的第一个公共节点【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:输入两个链表,找出它们的第一个公共节点。链表节点定义如下:struct ListNode { int m_nKey; ListNode* m_pNext;};解题思路:1.这个题主要需要抓住一点,观察链表节点构造发现是一个单向链表,且对于一个节...原创 2018-08-23 22:34:30 · 569 阅读 · 0 评论 -
【剑指offer】面试题57:和为S的两个数字/和为S的连续正数序列【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:和为s的两个数字输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。解题思路:1.使用hash表能够实现O(n)的时间复杂度,但是额外需要O(n)的空间,所以不是特别好。 2.应该抓住这里数组是一个递增...原创 2018-08-28 11:01:02 · 395 阅读 · 0 评论 -
【剑指offer】面试题58:翻转单词顺序/左旋转字符串【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:翻转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出“student. a am I”。解题思路:1.第一步翻转句子中的所有字符,例如“I am a s...原创 2018-08-28 15:39:42 · 609 阅读 · 0 评论 -
【剑指offer】面试题1:赋值运算符函数【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:赋值运算符函数如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString {public: //构造函数 CMyString(char *pData = nullptr); CMyString(const CM...原创 2018-08-31 12:04:19 · 1672 阅读 · 1 评论 -
【剑指offer】面试题53:在排序数组中查找数字【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:数字在排序数组中出现的次数。统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,应该输出4。解题思路:1.遍历数组的复杂度为O(n),要找比该复杂度更低的算法,那么就能想到二分查找,其复杂度为O(logn)。 2.使用二分查找找到该数字...原创 2018-08-24 12:08:50 · 563 阅读 · 0 评论 -
【剑指offer】面试题59:滑动窗口的最大值【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:滑动窗口的最大值给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为{4,4,6,6,6,5}。解题思路:1.这个题目需要使用双向队列deque来进行解答...原创 2018-08-28 19:20:53 · 590 阅读 · 0 评论 -
【剑指offer】面试题60:n个骰子的点数【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:滑动窗口的最大值把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。解题思路:1.解法一可以使用递归来求解。详细代码见书。 2.解法二的思路为:在一轮循环当中,第一个数组总的第n个数字表示骰子和为n出现的次数。在下一轮循环中,我们...原创 2018-08-28 19:23:06 · 1162 阅读 · 0 评论 -
【剑指offer】面试题61:扑克牌中的顺子【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:扑克牌中的顺子从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。其中A为1,J为11,Q为12,K为13,而大小王为0,且大小王能够当做任意一张牌。解题思路:1.首先应该对数组进行排序。 2.统计数组中大小王(0)出现的个数。 3.统计数组中所有相邻数...原创 2018-08-28 20:08:41 · 1037 阅读 · 0 评论 -
【剑指offer】面试题62:圆圈中最后剩下的数字【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目:圆圈中最后剩下的数字0,1,……,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里面删除第m个数字。求出这个圆圈里剩下的最后一个数字。解题思路:1.使用容器模拟一个环形链表来解答。可以AC的解法【C++版本】#include <iostream...原创 2018-08-28 21:26:07 · 545 阅读 · 0 评论 -
【剑指offer】面试题3:数组中重复的数字【C++版本】
总结的部分题目思路与代码,待完善。 【剑指offer-第二版】部分题目与解答【C++版本】题目一:找出数组中重复的数字在一个长度为n的数组里的所有数字都在0~n-1范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。...原创 2018-09-07 12:58:50 · 2121 阅读 · 1 评论