剑指offer习题解答
小狗腿腿腿腿腿
这个作者很懒,什么都没留下…
展开
-
题目四:重建二叉树(已知前序中序和已知中序后序)
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。比如说输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出该二叉树。#include <stdio.h>#include <string.h>#include <stdli...原创 2019-05-13 23:26:12 · 192 阅读 · 0 评论 -
调整数组顺序使 奇数位于偶数前面
类似快排的做法#include <stdio.h>#include <string.h>#include <stdlib.h>#include <assert.h>void reOrderArray(int *arr, int len){ int *low = arr; int *high = arr+len-1; while...原创 2019-07-31 19:57:51 · 114 阅读 · 0 评论 -
用O(1)的时间复杂度删除链表中的结点
//链表结点typedef struct ListNode{ int data; struct ListNode* next;}ListNode,*pListNode;//函数void DeleteNode(pListNode* pListHead, pListNode pos);我们普通所想到的方法就是,遍历这个链表,然后查找到该节点,查找到它的前驱,删除当前结点...原创 2019-07-31 19:19:25 · 359 阅读 · 0 评论 -
题目十二:打印1到最大的n位数
题目:输入数字n,按顺序打印出从1最大的n位十进制数,比如输入3,那么打印出来1、2、3一直到最大的三位数,也就是999简单解法:#include <iostream>using namespace std;void PrintToMaxNumber(int n){ int number = 1; int i = 0; while(i++ < n) ...原创 2019-07-11 15:38:40 · 138 阅读 · 0 评论 -
题目十一:数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。class Solution {public: double Power(double base, int exponent) { if(exponent>0) { if(exponent==1) ...原创 2019-07-11 11:43:16 · 132 阅读 · 0 评论 -
题目十:二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。class Solution {public://位运算 int NumberOf1(int n) { int count = 0; for(int i = 0; i < 32; i++) { if( (n&1...原创 2019-07-11 11:13:40 · 119 阅读 · 0 评论 -
题目九:矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?class Solution {public: int rectCover(int number) { if(number < 1){ return 0; } e...原创 2019-07-11 10:42:25 · 125 阅读 · 0 评论 -
题目八:青蛙跳台阶
一只青蛙一次可以跳1级台阶,也可跳2级,那么这个青蛙跳上一个n级的台阶,共有多少中解法?n = 0 0n = 1 1n = 2 2种方法,(可以是 1 1,也可以直接跳2个台阶)n = 3 3种方法,(可以是111,也可以是12,还可以是21)n = 4 5种方法,(可以是1111,22,211,112,121).....以此类推 即 f(0) = 0...原创 2019-05-16 22:39:34 · 261 阅读 · 0 评论 -
题目六:旋转数组中的最小数组
特殊情况示例如下:如果出现这种情况,此时我们需要选择顺序排序:if(rotateArray[left] == rotateArray[right] && rotateArray[left] == rotateArray[mid]) { return Minorder(rotateArr...原创 2019-05-16 21:41:28 · 198 阅读 · 0 评论 -
题目五: 用两个栈实现一个队列&两个队列实现一个栈
即两个栈,stack1用来push数据,即{a,b,c},然后把stack1的数据pop出来,由于栈是先进后出原则,所以出来顺序是{c,b,a}然后在stack2 push stack1 所弹出来的数据,存储即为{c,b,a},pop的话就是{a,b,c},即满足了队列的先进先出原则。class Solution{public: void push(int node)...原创 2019-05-15 21:50:02 · 201 阅读 · 0 评论 -
题目三:单链表的逆置
题目描述:输入一个单链表的头节点,然后从尾到头的打印它。解法1:使用头插法进行逆置#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>//带有头节点的单链表typedef struct Node{ int data; str...原创 2019-05-10 22:34:29 · 416 阅读 · 0 评论 -
题目1和题目2:二维数组中的查找、替换字符串中的空格
题目1:二维数组中的查找解题思路:我们从左下角开始查找,以7为例,7>6,但是6是第一列最大的数字,所以把第一列去掉(j++),从第二列查找 以4为例,4<6,6是该列最大该行最小,所以去掉最后一行,(i--),从倒数第二行开始查找 ...原创 2019-05-10 21:29:04 · 204 阅读 · 0 评论