- 博客(25)
- 收藏
- 关注
原创 【牛客网】剑指offer编程题:从上往下打印二叉树(C++)
解题思路: 题目考察树的层次遍历。树的层次遍历,故名思议,在一棵树中,把节点从左往右,一层一层的,从上往下,遍历输出,这里要用到一种很重要的数据结构,队列。 步骤如下: 1.首先将根节点放入队列中。 2.当队列为非空时,循环执行步骤3到步骤5,否则执行6; 3.出队列取得一个结点,访问该结点; 4.若该...
2020-04-20 17:12:38 206
原创 【牛客网】剑指offer编程题:栈的压入、弹出序列(C++)
解题思路:模拟堆栈操作1、将原数列依次压栈,栈顶元素与所给出栈队列相比,如果相同则出栈,如果不同则继续压栈,直到原数列中所有数字压栈完毕。2、检测栈中是否为空,若空,说明出栈队列可由原数列进行栈操作得到。否则,说明出栈队列不能由原数列进行栈操作得到。...
2020-04-20 16:41:40 812
原创 【牛客网】剑指offer编程题:包含min函数的栈(C++)
解题思路:设置主栈(stack1),最小元素栈(stack2),保持stack2的栈顶元素始终是栈中的最小元素。入栈原则:1、先入主栈stack1;2、如果最小元素栈stack2为空栈, value入栈;如果最小元素栈stack2不为空栈,比较value与stack2 栈顶元素的大小,小于栈顶元素,则value入栈。(保持栈顶元素为当前最小元素)。出...
2020-04-20 12:40:12 223
原创 【牛客网】剑指offer编程题:顺时针打印矩阵(C++)
解题思路:从右到左:添加限制条件(top < bottom)从下到上:添加限制条件(left < right)
2020-04-20 11:43:13 177
原创 【牛客网】剑指offer编程题:二叉树的镜像(C++)
解题思路:仔细观察两个二叉树,会发现其实由源二叉树到镜像二叉树的变化,其实是每个结点的左右子树对调变换得到的结果。可以由顶向下,采用递归的方法,将每个结点的左右子树进行调换,实现题目要求。...
2020-04-20 11:07:47 168
原创 【牛客网】剑指offer编程:合并两个排序的链表(C++)
方法一:非递归方法1、创建一个虚拟头结点 temp,指向当前结点的指针cur ;2、当p1,p2 都存在时(都有未合并的结点),比较两个链表当前头结点 p1,p2 的大小, p1 <= p2 时,cur 指向 p1,将 p1 加入新链表中;p1 > p2时,cur指向 p2,将 p2加入新链表中。重复上述操作,直到其中一个链表为空,或者两...
2020-04-19 17:30:05 188
原创 【牛客网】剑指offer编程题:调整数组顺序使奇数位于偶数前面(C++)
题目注意点:保证相对位置不变。方法一:用两个队列实现方法二:冒泡排序(采用从后往前冒)
2020-04-19 15:22:09 193
原创 【牛客网】剑指offer编程题:二进制中1的个数(C++)
计算机中所有的整数都是以补吗的形式存储的。整数的补码就是它本身,负数的补码是它除了符号位的位数取反加一。也就是说,题目中不需要考虑数的符号问题。...
2020-04-19 14:10:25 184
原创 【牛客网】剑指offer编程题:变态跳台阶(C++)
这个题目和之前一篇跳台阶有相似的地方,但是也有不同之处,青蛙一次性跳台阶次数有所变化。解题思路:1、当number = 1时,只有一种跳法,dp[1] = 1;2、当number = 2时,有两种跳法,dp[2] = 2;3、当number >=3时:分析青蛙先跳到前面任意一阶,再直接跳到最后一阶的所有情况,还有直接一步跳到最后一阶的情况。 ...
2020-04-19 10:09:57 332
原创 【牛客网】剑指offer编程题:跳台阶(C++)
思路:1、当number为 1时,只有一种跳法;2、当number为 2时,有两种跳法;3、当number大于等于 3时,因为青蛙可以跳一步或者两步,那样dp[3] = dp[2]+ dp[1];可以得到: dp[number] = dp[number-1] + dp[number-2]; //使用递归方法...
2020-04-19 09:36:36 257
原创 【牛客网】剑指offer编程题:斐波那契数列(C++)
斐波那契数列: F[1] = 1; F[2] = 2; F[n] = F[n-1]+F[n-2] (n>=3) 本题考察的是递归的知识,题目比较简单。但是直接用递归的方法,大量的重复计算,会导致内存溢出,所以其实这个题目不适合用递归的方法,不符合题目要求,无法通过编译。我采用迭代的方法,用first和second 保存计算...
2020-04-19 09:15:01 267
原创 【牛客网】剑指offer编程题:用两个栈实现队列(C++)
栈:先进后出(杯子)队列:先进先出(管道)队列 push的实现:把 node入栈stack1 (模拟队列);队列 pop 的实现:1、编写copy函数(将一个栈的元素移到另一个栈里(结果两个栈元素顺序相反)); 2、 stack1移到stack2中; ...
2020-04-18 21:05:21 154
原创 【牛客网】剑指offer编程题:重建二叉树(C++)
前序遍历:先访问根节点,在访问左节点,最后访问右节点。、遍历结果:ABDFECGHI中序遍历:先访问左节点,再访问根节点,最后访问右节点。遍历结果:DBEFAGHCI 在这个题目中要充分利用先序遍历和中序遍历的特点,先序遍历(根左右)找到根节点的位置,中序遍历(左根右)找到左子树的长度。利用递归重建二叉树。代码:class Solution {pu...
2020-04-18 20:20:19 181
原创 【牛客网】剑指offer编程题:替换空格(C++)
1、先计算字符串里的空格数 count。2、利用数学关系进行移位:(从后往前进行移位,防止覆盖) 从字符串的尾部往前遍历,若不是空格,往后移 count*2位; 若是空格:(预留改为%20多出来的两个的位置) count--; str[i + count * 2] = '%'; ...
2020-04-18 19:27:25 149
原创 【牛客网】剑指offer编程题:从尾到头打印链表
方法一:从头到尾遍历压栈操作,再出栈,实现链表逆序。方法二:先从头到尾将存入ArrayList中,最后反逆序输出。这里用到反向迭代器的知识:begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示。这两个迭代器通常用于标记包含容器中所有元素的迭代范围。c.begin() 返回一个迭代器,它指向容器c的第一个元素c.end() 返回一...
2020-04-18 16:46:50 161
原创 【牛客网】剑指offer编程题:构建乘积数组
因为题目规定不能用除法,所以把 B分成两部分,即前缀部分和后缀部分: mul_pre[i] = A[0]*A[1]*....A[i-1]*A[i]; mul_suf[i] = A[i]*A[i+1]*...A[n-1]; B[i] = mul_pre[i-1] * mul_suf[i+1];代码如下:class Solution {pu...
2020-04-18 15:27:38 171
原创 【牛客网】剑指offer编程题:二位数组中的查找
方法一:通过遍历array中的数组有没有target的值,时间时间复杂度 O(n*m)。 不足:没有用到题目中的行列顺序递增的条件。方法二:从矩阵的右上角开始找。由题目可知矩阵中的数值大小由左上角向右下角辐射递增,从右上角开始比较查找,大于目标值列数就往左推进,小于目标值行数就往下推进,直到找到目标值,返回true,或者直到左下角也没找到目标值,返回false...
2020-04-18 10:55:14 129
原创 【牛客网】剑指offer编程题:数组中的重复数字(C++)
这道题目主要考察数组相关的内容,思路也比较简单。题目中规定所有数字都在0~n-1的范围内,那么这个数组里的数值不会超出长度为n的数组的下标范围0~n-1,只需要找到任意一个重复的数值即可,我们可以对这个数组从头开始遍历:1、如果 i与numbers[i]相等,遍历下一个元素;2、如果i与numbers[i]不相等,那么: 如果numbers[i]...
2020-04-18 09:52:11 227
原创 LeedCode 717 1比特与2比特字符
题目描述:有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10或11)来表示。现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。示例1:输入:bits = [1, 0, 0]输出: True解释:唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。示例2:输入...
2019-07-05 15:43:02 176
原创 Java学习:Java的基本数据类型
相对于C和C++,Java的数据类型少了很多,在Java中有8种基本数据类型来储存数值、字符和布尔值。 分别为: 整数类型(byte、short、int、long); 浮点类型(float、double); 字符型 (char); 布尔型 (boolean);整数类型:是用来存储整数数值,没有小数部分的数值。可以...
2018-09-12 00:42:26 354
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人