
剑指offer
编程题练习
哪吒要进厂啦
如果有来生,
要做一棵树,
站成永恒,
没有悲欢的姿势。
一半在土里安详,
一半在风里飞扬,
一半洒落阴凉,
一半沐浴阳光,
非常沉默非常骄傲,
从不依靠 从不寻找。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
❤️【剑指offer】链表反转❤️
题目描述 输入一个链表,反转链表后,在这里插入代码片输出新链表的表头。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { ListNode* head1; ListNode*原创 2020-09-01 11:16:05 · 226 阅读 · 0 评论 -
剑指offer(jz18)题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: void Mirror(TreeNode *pRoot) { //递归终止原创 2020-09-14 18:56:27 · 90 阅读 · 0 评论 -
剑指offer(jz17)题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: bool HasSubtree(TreeNode* pRoo原创 2020-09-14 18:54:37 · 140 阅读 · 0 评论 -
剑指offer(jz20)定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 解法一: 思路简介:为了达到min函数的时间复杂度要求,所以采用数组存储每次入栈操作后的最小数据 class Solution { public: void push(int value) { array[++head]=value; if(head==0) minnum[head]=array[head];原创 2020-09-14 12:08:44 · 168 阅读 · 0 评论 -
剑指offer(jz16)
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { /原创 2020-09-10 22:53:46 · 105 阅读 · 0 评论 -
剑指offer(jz15)
题目描述 输入一个链表,反转链表后,输出新链表的表头。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { ListNode* head1; ListNode* temp;原创 2020-09-10 20:40:05 · 88 阅读 · 0 评论 -
剑指offer(jz14)
题目描述 输入一个链表,输出该链表中倒数第k个结点。 题目解析 1、因为链表是不能够按照索引来查询数据的,所以需要遍历链表来确定倒数第k个数字。 2、可以采用两次遍历来找到数据位置。第一次确认链表长度,第二次根据长度和k值得关系来确定倒数第k个数字。 3、这里我们采用的是双指针一次遍历,只要确保两个指针的间隔为k-1,那么当前面的指针到达链表尾部的时候,后面的指针指向的数据就是我们需要的答案。 代码如下: /* struct ListNode { int val; struct ListNode原创 2020-09-10 20:37:47 · 97 阅读 · 0 评论 -
剑指offer(jz13)
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 解法一: 新建临时数组,遍历原数组将偶数和奇数分离再拼接到原数组,此方法需要消耗较大空间。 解法二: 步骤一:外层循环,每次循环都是一个新的子数组array[k ,length-1] 步骤二:找到当前子数组的第一个奇数array[i]和第一个偶数array[j](注意子数组全是偶数和全是奇数的处理) 步骤三:如果i>原创 2020-09-09 14:54:06 · 197 阅读 · 0 评论 -
剑指offer(jz12)
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0 class Solution { public: double Power(double base, int exponent) { //浮点数和0的比较 if(base<=0.000001&&base>=(-0.000001)) return 0;原创 2020-09-09 11:29:52 · 94 阅读 · 0 评论 -
剑指offer(jz11)
题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 class Solution { public: int NumberOf1(int n) { int count = 0; int temp = 1; while(temp!=0){ if((n&temp)!=0) count++; temp = temp<<1; }原创 2020-09-09 11:13:52 · 102 阅读 · 0 评论 -
剑指offer(jz10)
题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 解法一: 分析:这其实是斐波那契数列问题 int rectCover(int number) { //也是斐波那契数列,n==1时1种,n==2时2种,n==3时3种...f(n)=f(n-1)+f(n-2) if(number==0) return 0; else if(原创 2020-09-09 11:00:45 · 148 阅读 · 0 评论 -
剑指offer(jz7)
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n<=39 因为不需要保存斐波那契数列的值,所以利用两个变量来计算下一步结果节省存储空间。 class Solution { public: int Fibonacci(int n) { if(n==0) return 0; //斐波那契数列初始值 int front1=1,front2=1,t.原创 2020-09-08 10:57:58 · 96 阅读 · 0 评论 -
剑指offer(jz8)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果) 递归表达式: f(n)=0; n=0 f(n)=1; n=1 f(n)=2; n=2 f(n)=3; n=3 f(n)=5; n=4 因此 f(n)=f(n-1)+f(n-2); n>=2 递归算法一: class Solution { public: int jumpFloor(int number) { if(number==0){原创 2020-09-08 10:55:24 · 138 阅读 · 0 评论 -
剑指offer(jz9)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 方法一: 根据题目可以分析得出递推表达式,n级台阶的跳法是n-1级的两倍,即1+f(n-1)和f(n-1)+1。 表达式如下: class Solution { public: int jumpFloorII(int number) { if(number==1) return 1; if(number==2)原创 2020-09-08 10:31:08 · 115 阅读 · 0 评论 -
剑指offer(jz6)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 解法一: 顺序查找,时间复杂度为O(n) class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) {原创 2020-09-07 12:05:00 · 119 阅读 · 0 评论 -
剑指offer(jz4)
题目描述(重建二叉树) 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2020-09-07 10:03:19 · 104 阅读 · 0 评论 -
剑指offer(jz5)
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 class Solution { public: void push(int node) { while(!stack1.empty()){ stack2.push(stack1.top()); stack1.pop(); } stack2.push(node);原创 2020-09-07 09:59:49 · 101 阅读 · 0 评论