自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 刷题笔记《剑指offer》-第二十一题 栈的压入、弹出序列

题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:思路:模拟压栈和弹栈的序列 1. 需要一个压入栈,来模拟压入的顺...

2019-09-04 12:31:27 119

原创 刷题笔记《剑指offer》-第二十题 包含min函数的栈

题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路: 1. 使用一个辅助栈 2. 初始时,都为空 3. 放入第一个元素时,数据栈和辅助栈都放入同一个元素 4. 当放入第二个甚至更多个的元素时,数据栈正常放入数据,辅助栈中放入较小的数据 5. 弹栈都同时弹出栈顶元素 6. 辅助栈的...

2019-09-04 11:10:25 142

原创 刷题笔记《剑指offer》-第十九题 顺时针打印矩阵

题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:思路:通过判断条件改变方向 1. 每次碰到四个角落就变换前进的方向 2. 变...

2019-09-04 11:08:37 128

原创 刷题笔记《剑指offer》-第十八题 二叉树的镜像

题目描述:题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5思路:遍历二叉树,遇到节点就将他的左右子树交换。代码public class Mirror { public void mirror(Tre...

2019-09-04 11:06:32 110

原创 刷题笔记《剑指offer》-第十七题 树的子结构

题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路: 1. 如何遍历一棵树? 前序遍历 2. 在根节点相同的情况下,如何判断两棵树是否相同? a. 当前节点相同 b. 左子树相同 c. 右子树相同 d. 递归 3. 在根节点相同的情况下,如何判断tree...

2019-09-04 10:57:34 97

原创 刷题笔记《剑指offer》-第十六题 合并两个排序的链表

题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路: 1. 谁头小谁作为返回的头节点 2. 谁小谁插入代码import DateStructure.ListNode;public class Merge { public static ListNode merge(ListNode list1, List...

2019-09-04 10:52:46 110

原创 刷题笔记《剑指offer》-第十五题 反转链表

题目描述:输入一个链表,反转链表后,输出新链表的表头。思路:思路1: 1. 最简单的 使用一个栈思路2: a -> b -> c 将b节点的指针指向a节点即可,但是会导致无法找到c节点,所以使用三个节点 1. 使用三个指针 p, q, k 分别指向a, b, c 2. q.next = p; p = q; ...

2019-09-04 10:48:46 122

原创 刷题笔记《剑指offer》-第十四题 FindKthToTail 链表中倒数第k个结点

题目描述:输入一个链表,输出该链表中倒数第k个结点。思路:思路1: 1. 使用两个指针p, q. 起始时,他们都在同一个位置。 2. 先让q走k下,让他到达顺数第q个节点。 3. 再让p,q同时走,当q走到最后一个节点的时候,p就指向倒数第k个节点了。注意: 各种超越边界的情况: 1. k = 0 2. k大于了链表的长度 3. 输...

2019-09-04 10:45:24 191

原创 刷题笔记《剑指offer》-第十三题 ReOrderArray 调整数组顺序使奇数位于偶数前面

题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.思路:思路1: 类似冒泡排序的方法, 遇到前偶后奇的情况就交换。 时间复杂度O(n^2)思路2: 开辟两个数组,这种方法就是空间换时间咯,空间O(n)时间O(n)代码public cla...

2019-09-04 10:42:06 117

原创 刷题笔记《剑指offer》-第十二题 Power 数值的整数次方

题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路:思路1: 1. 肯定不能调用Math.pow()函数咯,倒是可以用它来测试一下结果是否正确 2. 使用循环重复乘exponent次, 时间复杂度为O(n), 肯定有更加快速的方法 3. 避免重复计算可以减少乘法的计算次数: a^...

2019-08-19 10:39:17 147

原创 刷题笔记《剑指offer》-第十一题 NumberOfOne 二进制中1的个数

题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:1. 位运算替代乘除法。2. 将该数与类似‘0001 0000’这种数做‘与’运算, 可以判断该二进制位是不是1,如果结果为0就不是1, 不为0就是1.3. 使用让flag左移,来避免负数右移带来的全为1的情况。4. 当初始为‘0000 0001’的flag左移走到头的时候,它就会由于数值溢出而变为0,从而...

2019-08-19 10:34:03 170

原创 刷题笔记《剑指offer》-第十题 RectCover 矩形覆盖

题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?(图例可见剑指offer第79页)思路:分析:f(1) = 1, f(2) = 2 从第三个开始时,有两种考虑情况。 第一种情况,使用一块小矩形竖着摆放,那么剩下来的仍然是一个2*(n-1)的矩形,为f(n-1)种情况。 第二种...

2019-08-19 10:30:35 186

原创 刷题笔记《剑指offer》-第九题 JumpFloorInsane 变态跳台阶

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:第一种解法: 1. f(1) = 1; 2. f(2) = 2; = f(2-1) + f(2-2) = f(1) + f(0) = 2 3. f(3) = f(3-1) + f(3-2) + f(3-3) ...

2019-08-19 10:27:29 101

原创 刷题笔记《剑指offer》-第八题 JumpFloor 跳台阶

题目描述:题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路:在n>2的时候, 如果最后一次跳一步,有 f(n-1) 种可能,如果最后一次跳两步,有f(n-2)种可能所以总的情况应该是起两种情况的总和,也就是f(n) = f(n-1) + f(n-2); 并且有f(1) = 1, f(2) = 2;...

2019-08-19 10:23:40 308

原创 刷题笔记《剑指offer》-第七题 Fibonacci 斐波那契数列

题目描述:输入:int n输出:f(n)其中:f(0) = 0;f(1) = 1;f(n) = f(n-1) + f(n-2) n>1;思路:最容易想到的是递归的形式:但是这种形式会重复的计算多次底层的值第二种思路是先计算好底层的两个子节点数据,并且保存起来,在后面计算的时候直接使用,避免重复计算。代码 public static int fibonacciNa...

2019-08-19 10:20:36 128

原创 刷题笔记《剑指offer》-第六题 MinNumberInRotateArray 旋转数组的最小数字

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:1. 如果array[mid] >= array[left],表明最小值在mid的右边,将lef...

2019-08-19 10:16:11 130

原创 刷题笔记《剑指offer》-第五题 StackQueue 用两个栈来实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:一个栈s1用来输入,一个栈s2用来输出由于栈会导致输出的顺序反向,所以考虑负负得正,倒两次,就是正序了入栈时随便入出栈时,s2中如果有数据,就直接出栈;s2中如果没有数据,让s1中的全部倒入s2中再出栈都为空,就不能出栈咯代码public class StackQueue {...

2019-08-06 21:32:49 87

原创 刷题笔记《剑指offer》-第四题 ReconstructBinaryTree 重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:1. 前序遍历特点:第一个节点是根节点,中序遍历特点:根节点的前面全是左子树节点,后面全是右子树节点2. 整体思路类似于考研时二叉树重建...

2019-08-06 21:28:15 253

原创 刷题笔记《剑指offer》-第三题 PrintListFromTailToHead 从尾到头打印链表

题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。思路:1.看到逆序,马上想到使用栈呗。代码/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = ...

2019-08-06 21:19:41 608

原创 刷题笔记《剑指offer》-第二题 ReplaceSpace 替换空格

题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:使用插入操作不可取,移动的元素过多。计算替换后的字符串的总长度。增长字符串,达到替换后的总长度。从后向前使用双指针依次替换, 从前往后替换会导致部分字符被覆盖。问题:对于C/C++的语言来说,它们的字符串就...

2019-08-01 17:05:06 270

原创 刷题笔记《剑指offer》-第一题Find 二维数组中的查找

题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:全员遍历不可取,时间复杂度太高 类似与有序列表的二分查找,让每一次迭代我们都只有一个方向去前进。 起始位置为右上角的数。如果target比当前位置小,只有向左走才会变小,那么targe...

2019-08-01 15:46:05 129

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除