自定义博客皮肤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 106

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

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

2019-09-04 11:10:25 120

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

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 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 114

原创 刷题笔记《剑指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 92

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

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

2019-09-04 10:57:34 80

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

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

2019-09-04 10:52:46 96

原创 刷题笔记《剑指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 104

原创 刷题笔记《剑指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 172

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

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

2019-09-04 10:42:06 103

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

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

2019-08-19 10:39:17 130

原创 刷题笔记《剑指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 155

原创 刷题笔记《剑指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 168

原创 刷题笔记《剑指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 85

原创 刷题笔记《剑指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 289

原创 刷题笔记《剑指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 107

原创 刷题笔记《剑指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 116

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

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

2019-08-06 21:32:49 67

原创 刷题笔记《剑指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 237

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

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

2019-08-06 21:19:41 593

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

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

2019-08-01 17:05:06 224

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

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

2019-08-01 15:46:05 116

空空如也

空空如也

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

TA关注的人

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