![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 51
young Danny
这个作者很懒,什么都没留下…
展开
-
二十二、树的子结构
描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)示例1输入:{8,8,#,9,#,2,#,5},{8,9,#,2}返回值:true基本思路按照树 A 中每个节点的遍历顺序比较当前节点和 B 的根节点是否相同,如果相同就按照 B 的结构遍历他们的每个节点。例子是题目所给的样例: A : {8,8,#,9,#,2,#,5} B : {8,9,#,2}1.两个节点都是 8 ,根节点相同,开始遍历其他节点。2. 第二个节点不相同函数结束3.转载 2021-09-01 17:18:51 · 64 阅读 · 0 评论 -
二十一、合并两个排序的链表
描述:题目要求:给两个非递减单链表l1, l2,合并为一个非递减的单链表。示例1输入:{1,3,5},{2,4,6}返回值:{1,2,3,4,5,6}方法一:迭代版本求解初始化:定义cur指向新链表的头结点操作:如果l1指向的结点值小于等于l2指向的结点值,则将l1指向的结点值链接到cur的next指针,然后l1指向下一个结点值否则,让l2指向下一个结点值循环步骤1,2,直到l1或者l2为nullptr将l1或者l2剩下的部分链接到cur的后面技巧一般创建单链表,都会设一个虚拟头结转载 2021-09-01 16:35:53 · 99 阅读 · 0 评论 -
十八、调整数组顺序使奇数位于偶数前面
描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。方法一、使用辅助数组具体的做法就是把每个数加入符合条件的数组,如下图,橙色代表奇数数组,绿色代表偶数数组,最后再合并两个数组。因为我们是按照从左到右的顺序访问每个元素,容易证明奇数元素、偶数元素之间的相对位置是可以保证的,实现的代码如下:class Solution {public: vector<int&原创 2021-08-31 17:32:10 · 82 阅读 · 0 评论 -
十七、整数的整次平方
描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。示例1输入:2.00000,3返回值:8.00000示例2输入:2.10000,3返回值:9.26100示例3输入:2.00000,-2返回值:0.25000说明:2的-2次方等于1/4=0.25预处理:求pow(b, n),如果n为负数怎么解决?假如求转载 2021-08-31 17:05:05 · 107 阅读 · 0 评论 -
十六、二进制中1的个数
描述:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入:10返回值:2考点:这是一篇面对初级coder的题解。知识点:二进制,位运算难度:一星方法一:暴力方法分析:题目给一个有符号的整数int,求整数转化成二进制数后,1的个数。直接根据题目的描述来提出方法一。有2个问题:问题1: 如何从十进制数转化到二进制数?问题2:转化为二进制数后,如果判断有1的个数?方法1:除2取模法。class Solution {public: int N转载 2021-08-31 15:30:38 · 452 阅读 · 0 评论 -
十五、矩形覆盖
描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,从同一个方向看总共有多少种不同的方法?比如n=3时,23的矩形块有3种不同的覆盖方法(从同一个方向看):输入描述:21的小矩形的总个数n返回值描述:覆盖一个2n的大矩形总共有多少种不同的方法(从同一个方向看)方法一:递推n=1时,显然只有一种方法n=4,如图有4种方法。如果到这里,还没有发现规律怎么办呢?那我们就再分析以下,从n=3到n=4,怎么来的呢?这里有2种情况:转载 2021-08-31 15:02:12 · 118 阅读 · 0 评论 -
十四、跳台阶扩展问题
描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。方法一:暴力方法设f[i] 表示 当前跳道第 i 个台阶的方法数。那么f[n]就是所求答案。假设现在已经跳到了第 n 个台阶,那么前一步可以从哪些台阶到达呢?如果上一步跳 1 步到达第 n 个台阶,说明上一步在第 n-1 个台阶。已知跳到第n-1个台阶的方法数为f[n-1]如果上一步跳 2 步到达第 n 个台阶,说明上一步在第 n-2 个台阶。已知跳到第n-2个台阶的方转载 2021-08-30 22:14:38 · 274 阅读 · 0 评论 -
十三、跳台阶
描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)题解一:记忆化搜索假设有n阶台阶,在所有的跳法中,由于青蛙一次只能跳1步或者2步,所以青蛙跳上最后一阶只能由f(n-1)+1 或者f(n-2)+2 这两种情况得来。即:f(n)=f(n-1)+f(n-2)同理:f(n-1)=f(n-2)+f(n-3),以此类推。这其实就是一个斐波拉契数列。图示如下:class Solution {public: int jump转载 2021-08-30 21:51:04 · 48 阅读 · 0 评论 -
十、用两个栈实现队列
描述用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例:输入:[“PSH1”,“PSH2”,“POP”,“POP”]返回:1,2解析:“PSH1”:代表将1插入队列尾部“PSH2”:代表将2插入队列尾部"POP“:代表删除一个元素,先进先出=>返回1"POP“:代表删除一个元素,先进先出=>返回2示例1输入:[“PSH1”,“PSH2”,“POP转载 2021-08-30 21:21:29 · 81 阅读 · 0 评论 -
十二、斐波那契数列
描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39输入:4返回值:3方法一:递归题目分析,斐波那契数列公式为:f[n] = f[n-1] + f[n-2], 初始值f[0]=0, f[1]=1,目标求f[n]看到公式很亲切,代码秒秒钟写完。class Solution {public: int Fibonacci(int n) { if(n==0||n==1) re原创 2021-08-30 19:52:44 · 109 阅读 · 0 评论 -
十一、旋转数组的最小数字
描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例1输入:[3,4,5,1,2]返回值:1这是一道对二分查找算法灵活运用的一道题目。二分查找算法不限于运用在有序数组上。如果能够明确二分之后,答案存在于二分的某一侧,就可以使用二分。本题就是如此。难度:二星考察知识:数组,二分查找方法一:暴力方法直接遍历一遍数组,即可找到最小值。但是本题的附加条转载 2021-08-27 15:28:10 · 59 阅读 · 0 评论 -
九、重建二叉树
描述给定某二叉树的前序遍历和中序遍历,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.0 <= pre.length <= 20002.vin.length == pre.length3.-10000 <= pre[i], vin[i] <= 100004.pre 和 vin 均无重复元素5.vin出现的元素均出现在 pre里6.只需要返回根结点原创 2021-08-26 14:36:39 · 118 阅读 · 0 评论 -
八、从尾到头打印链表
描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000解法一 直接遍历题目很简单,很朴素。我们直接从这个链表的头节点开始进行遍历。然后我们记录下这个数组的每个节点的信息。最后反转一下整个数组,返回即可。代码如下需要直接遍历长度为n的链表的所有的结点,时间复杂度为O(n)需要存储长度为n的链表的所有的结点,空间复杂度为O(n)class Solution原创 2021-08-25 11:56:20 · 72 阅读 · 0 评论 -
七、替换空格
描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。示例1输入:“We Are Happy”返回值:“We%20Are%20Happy”我们直接使用C++的string进行处理。我们发现C++里面有一个string还是很好用的,它重载了+=运算符。我们可以直接通过遍历整个字符串进行处理。代码如下我们需要对长度为n的字符串遍历一次,时间复杂度为O(n),需要存储长度为n的字符串,空间复原创 2021-08-25 11:09:34 · 65 阅读 · 0 评论 -
六、二维数组中的查找
描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。0 <= array.length <= 5000 <= array[0].leng原创 2021-08-24 20:31:01 · 177 阅读 · 0 评论 -
四、排序...
1、冒泡排序class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型vector 待排序的数组 * @return int整型vector */ vector<int> MySort(vector<int>& arr) { // write code here原创 2021-08-19 17:19:50 · 61 阅读 · 0 评论 -
三、反转链表
知识点:单链表此题想考察的是:如何调整链表指针,来达到反转链表的目的。初始化:3个指针1)pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向nullptr2)cur指针指向待反转链表的第一个节点,最开始第一个节点待反转,所以指向head3)nex指针指向待反转链表的第二个节点,目的是保存链表,因为cur改变指向后,后面的链表则失效了,所以需要保存接下来,循环执行以下三个操作1)nex = cur->next, 保存作用2)cur->next = pre 未反转原创 2021-08-19 15:44:16 · 190 阅读 · 0 评论 -
二、简单的c++小程序
1、hello world#include <iostream>using namespace std;int main(){ cout << "Hello World!\n"; return 0;}2、我爱C++题目内容:在屏幕上显示下列两句话Hello C++.I like programming.提示:本题与helloworld类似,只是显示多行信息。输入格式:无输出格式:两行,单词间一个空格,行末标点为英文句点,每行末尾均有原创 2021-07-05 22:01:12 · 5105 阅读 · 7 评论