![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
chengxuya
我不甘心,从来都是,既然如此,一往无前。
展开
-
C++复习五-多态和虚函数
一、概述C++提供多态的目的是:可以通过基类指针对所有派生类(包括直接派生和间接派生)的成员变量和成员函数进行“全方位”的访问,尤其是成员函数。如果没有多态,我们只能访问成员变量。但是话又说回来,对象的内存模型是非常干净的,没有包含任何成员函数的信息,编译器究竟是根据什么找到了成员函数呢?我们将在《C++虚函数表精讲教程,直戳多态的实现机制》一节中给出答案。有了虚函数,基类指针指向基类对象时就使用基类的成员(包括成员函数和成员变量),指向派生类对象时就使用派生类的成员。换句话说,基类指针可以按照原创 2020-05-31 12:49:48 · 348 阅读 · 0 评论 -
连续子数组的最大和-动态规划
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:380643本题知识点:数组算法知识视频讲解题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望...原创 2020-05-02 20:48:24 · 265 阅读 · 0 评论 -
最小的k个数字-优先队列大顶堆-快速排序k或中位数-小顶堆大顶堆自建-时间复杂度分析
解题思路:直接排序,获取数组v[k]值。class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int>re(k,0); if(arr.size()<k)return re; ...原创 2020-05-02 20:20:56 · 362 阅读 · 0 评论 -
面试题39. 数组中出现次数超过一半的数字+map+摩尔投票
面试题39. 数组中出现次数超过一半的数字难度简单数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000解题思路方法一:正常思路可以先排序,再取中间值,中间值...原创 2020-05-02 18:11:13 · 151 阅读 · 0 评论 -
习题:字符串的排列+解题思路+map
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:633870本题知识点:字符串动态规划递归算法知识视频讲解题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长...原创 2020-05-02 17:17:20 · 192 阅读 · 0 评论 -
二叉搜索树与双向链表与树的中序线索化
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:418309本题知识点:链表树算法知识视频讲解题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。要求返回头结点,且最好是双向循环链表解答思路:中序线索二叉树改造实现简化类习题,牛客网题目不明确且测试数...原创 2020-04-28 23:26:26 · 133 阅读 · 0 评论 -
复杂链表的复制
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:594093本题知识点: 链表 算法知识视频讲解题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)原创 2020-04-28 22:03:11 · 129 阅读 · 0 评论 -
二叉树和为某一值的路径-路径必须是从根节点出发,还必须非得到达叶节点。
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:589567本题知识点:树算法知识视频讲解题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。一看就是后序遍历。解答:递归方法:/*struct TreeNode...原创 2020-04-28 17:11:04 · 427 阅读 · 0 评论 -
写代码须知+判断某一整数数组是否为某个二叉排序树的后序遍历。
一、写代码切记!!!默认值的设置也很讲究,要看哪种选择不影响最终结果。 和队列和栈和数组相关的时候前往不要忘记判空。 设置逻辑时要考虑各种各样的极限情况进行测试。 永远不要偷懒!!! 在已经设定好实现的整体逻辑后,永远不要想着省事,不要怕麻烦! 但是设置整体逻辑时可以理解找一种简单的方法。二、判断某一整数数组是否为某个二叉排序树的后序遍历时间限制:C/C++ 1秒,其他语言2秒...原创 2020-04-28 15:26:18 · 201 阅读 · 0 评论 -
先序序列构造二叉树-指针和引用。
bool buildTree(TreeNode*p){//如果这里是TreeNode&p, //按先序序列输入二叉树中的节点值,空格代表空字符 int ch; //接收输入的字符 cout << "先序输入字符" << endl; cin >> ch; if (ch == 0) p= NULL; else { if...原创 2020-04-28 13:46:37 · 298 阅读 · 0 评论 -
树的层序遍历-犯了不仔细思考的很蠢的错误
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<int> PrintFro...原创 2020-04-28 13:06:10 · 170 阅读 · 0 评论 -
栈的压入弹出序列
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:529652本题知识点:栈算法知识视频讲解题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1...原创 2020-04-28 12:35:55 · 105 阅读 · 0 评论 -
包含min函数的栈-最小堆的插入、删除(调整)
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:448024本题知识点:栈算法知识视频讲解题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。解答:class Solut...原创 2020-04-28 11:52:17 · 334 阅读 · 0 评论 -
绕圈输出矩阵,千万注意不同情况的讨论和最终的边界条件。
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:763729本题知识点:数组算法知识视频讲解题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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,...原创 2020-04-27 21:04:20 · 290 阅读 · 0 评论 -
二叉树镜像,两种解题思路,注意记住第二种。
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:415644本题知识点:树算法知识视频讲解题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 ...原创 2020-04-27 18:31:19 · 125 阅读 · 0 评论 -
划重点:树的子结构
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:722782本题知识点:二叉树算法知识视频讲解题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解答:*思路:参考剑指offer1、首先设置标志位result = false,因为一旦匹配成功result就设为true,...原创 2020-04-27 18:00:58 · 90 阅读 · 0 评论 -
习题八-跳台阶,动态规划,算法作业。
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:621564本题知识点:递归算法知识视频讲解题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解答:用的是动态规划思想,有子问题。具体定义回去细想一下。这是之前写过的算法作业,主要考虑最后一个台...原创 2020-04-26 21:46:24 · 310 阅读 · 0 评论 -
习题七-斐波那契数列
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:827207本题知识点:递归算法知识视频讲解题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39解答:class Solution {public: int Fibonac...原创 2020-04-26 21:28:34 · 245 阅读 · 0 评论 -
习题六-旋转数组的最小数字
时间限制:C/C++ 3秒,其他语言6秒空间限制:C/C++ 32M,其他语言64M热度指数:909757本题知识点:查找算法知识视频讲解题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给...原创 2020-04-26 21:21:53 · 103 阅读 · 0 评论 -
习题五-用两个栈实现队列,容器模板类栈。
用两个栈实现队列相似的企业真题时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:650995本题知识点:队列栈算法知识视频讲解题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解答:两个栈形成队列:队列先进先出,栈后进先出。想用两个栈实现队列,首先意识到C++的各种容器...原创 2020-04-26 21:12:29 · 134 阅读 · 0 评论 -
习题四-二叉树遍历和vector数组
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:997413本题知识点:树算法知识视频讲解题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返...原创 2020-04-26 20:45:45 · 161 阅读 · 0 评论 -
习题三:C++中的结构体(定义时就可以初始化)和vector数组用法
一、C和C++中的结构体不同1.C++对struct关键字进行了增强:如下代码struct info{ int a;};int main(int argc,char *argv[]){ info data;//在c中这样定义变量编译通不过,必须要加上struct,而在c++中这样是允许的 return 0;}2.C++中可以使用构造函数对结构体成员进行初始化,而C中...原创 2020-04-26 19:11:02 · 1597 阅读 · 0 评论 -
习题二-逻辑
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:1479419本题知识点:字符串算法知识视频讲解题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void ...原创 2020-04-26 18:46:24 · 142 阅读 · 0 评论 -
习题一-vector
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:1762562本题知识点:查找数组算法知识视频讲解题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。// ConsoleAp...原创 2020-04-26 18:01:47 · 254 阅读 · 0 评论