剑指offer
JohnWill_
小白一个,慢慢成长....
展开
-
替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:从前向后记录‘ ’数目,从后向前替换‘ ’。 重点:从后向前替换的时候的技巧 例如:“we are lucky”0 1 2 3 4 5 6 7 8 9 10 11w e a r e l u c k y可以得...原创 2018-07-23 10:29:06 · 381 阅读 · 0 评论 -
树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*//*...原创 2018-07-29 11:53:18 · 123 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: void reOrderArray(vector<int> &array) { vector<int> ar...原创 2018-07-29 11:53:29 · 2385 阅读 · 2 评论 -
求二进制数中0或1的个数
假如x是一个二进数,例如x=0xfffa(1111 1111 1111 1010),要实现去掉最低位一个0,可进行的操作是x|=(x+1),此时x==0xfffb(1111 1111 1111 1011) ;再去掉一个0,同样,x|=(x+1),则x==0xffff。如果x的2字节表示,则(x+1)为0。基于该思想,利用wile循环对(x+1)判断,可实现计算二进制数中所有位上0的个数。注意,x=...原创 2018-07-23 15:32:05 · 1034 阅读 · 0 评论 -
矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?class Solution {public: int rectCover(int number) { int dp[number+1]; dp[0]=0; dp[1]=1; dp...原创 2018-07-23 15:24:09 · 136 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public: int jumpFloorII(int number) { int d[number+1]; d[0]=0;d[1]=1;d[2]=2; if(number==0) ...原创 2018-07-23 15:15:36 · 133 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public: int jumpFloorII(int number) { int d[number+1]; d[0]=0;d[1]=1;d[2]=2; if(number==0) ...原创 2018-07-23 15:15:33 · 146 阅读 · 0 评论 -
斐波那契数列
题目:写一个函数,输入n,求斐波那契数列的第n项。 方法1:递归:int fib2(int n){if(n == 0)return 0;if(n == 1)return 1;return fib2(n-1)+fib2(n-2);}缺点:如果n比较大,那么递归程度比较深方法2:class Solution {public: ...原创 2018-07-23 14:54:10 · 104 阅读 · 0 评论 -
旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。本题给的也算是有序数列,一看就应该和二分沾边,事实也是这样。题目给的是非递减序列,就是说有可能会有重复的数字,要注意一下。来简单分析一下数组的可能。旋转过、没旋转过、...原创 2018-07-23 14:43:02 · 132 阅读 · 0 评论 -
用两个栈来实现一个队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } int pop() { int result; if(stack2.empty()) ...原创 2018-07-23 11:18:51 · 87 阅读 · 0 评论 -
重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图所示的二叉树并输出它的头结点。 分析及实现: 思路分析 根据二叉树前序遍历的特点(根-左-右),每次读取的第一个值一定是根节点,这样我们可以在中序...原创 2018-07-23 10:36:13 · 118 阅读 · 0 评论 -
[剑指Offer]二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入描述array: 待查找的二维数组 target:查找的数字输出描述查找到返回true,查找不到返回false思路一查找的方法一般就是顺序查找、二分查找、哈希表查找、二叉排序树查找...原创 2018-07-23 09:54:46 · 118 阅读 · 0 评论