自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

秦怀杂货店

纵然缓慢,驰而不息。

  • 博客(27)
  • 资源 (1)
  • 收藏
  • 关注

原创 剑指Offer(29)--最小的k个数

文章目录题目描述思路与解析题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路与解析下面方法的思路比较简单,但是比较取巧,直接借助了最大顶堆,也就是上面的元素是最大的。如果里面个数超过k的话,则弹出堆顶的元素。import java.util.ArrayList;import java.util.PriorityQueue;public class Solution { public ArrayList

2020-07-27 23:30:16 268

原创 剑指Offer(28)--数组中出现次数超过一半的数字

文章目录题目描述思路与解析题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路与解析这里主要使用了多数投票法,先取第一个数字,出现次数是1,遍历后面的数字,如果相同则加1,如果不同则减1,结果如果为0,则把当前的数字更新,而且次数更新为1。直到最后,则可以获取到出现次数最多的数字,再次遍历数组,统计该数字出现的次数,如果次数大于长

2020-07-26 23:28:34 349

原创 剑指Offer(27)--字符串的排序

文章目录题目描述输入描述:思路以及解析题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路以及解析使用回溯,通过交换字符实现。import java.util.ArrayList;import java.util.Comparator;public class Solu

2020-07-26 23:24:14 306

原创 剑指Offer(26)--二叉搜索树和双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路以及解答主要是使用递归,设置一个head和end,head只在第一次设置值,后面就是将end的right指向当前node,将当前node的left指向end,把end指向当前的node。class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; publ

2020-07-26 23:22:42 260

原创 剑指Offer(25)--复杂链表的复制

文章目录题目描述思路以及解法题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路以及解法一共有三种写法,第一种就是下面的,先复制next链路上的节点。然后复制random节点。复制random节点的时候,采取的是遍历的做法。class RandomListNode { int label;

2020-07-26 23:20:05 262

原创 剑指Offer(24)--二叉树中和为某一值的路径

文章目录题目描述思路以及解答题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路以及解答主要是借助队列,将遍历的节点放进队列中,到叶子节点之后计算和,然后再回溯到上面一层的时候,将队列最后一个元素取出来,放进当前的元素。import java.util.ArrayList;import java.util.ArrayList;import java.util.LinkedLis

2020-07-26 23:03:20 263

原创 剑指Offer(23)--二叉搜索树的后序遍历序列

文章目录题目描述思路以及解答题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路以及解答注意是二叉搜索树,如果是后续遍历的话,那么应该最后一个元素是中间元素mid,前面的元素可以分为两部分,一部分比mid小,另一部分全部比mid大。如果破坏这个原则,那么就应该输出No。 public boolean VerifySquenceOfBST(int[] sequence) { if

2020-07-26 23:00:06 246

原创 剑指Offer(22)--从上往下打印二叉树

文章目录题目描述思路以及解答题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路以及解答主要的思路是借助队列,先把当前元素放进队列,然后不断取出元素,取出元素的时候,同时处理其左子树和右子树,将其放到队列中。直到队列是空的。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/**public class TreeNode { int val = 0; Tr

2020-07-26 22:56:44 239

原创 剑指Offer(21)--栈的压入、弹出序列.md

文章目录题目描述思路以及解析题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路以及解析主要是模拟这个过程,先把压栈的挨个压入栈中,每压入一个,则找弹出顺序队列的当前元素是否与栈顶元素相等,相等则弹出。直到最后数据应该是空的,则表明两个顺序是

2020-07-26 22:53:38 263

原创 剑指Offer(20)--包含min函数的栈

文章目录题目描述思路以及解答题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路以及解答主要是两个栈,一个存储所有元素的datas stack,一个存储最小值 mins stack。push一个元素的时候,都需要push进datas stack,但是push进入mins stack需要满足条件:当前的mins stack是空的,直接放入。或者当前的mins stack的栈顶元素大于或者等于push进来的值。pop一个元素的时候,如果栈

2020-07-26 22:48:31 282

原创 剑指Offer(19)--顺时针打印矩阵

文章目录题目描述思路与解析题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.思路与解析这道题难度在于如何正确地处理边界情况,下面我们使用的是不断缩小矩阵上,下,左,右四个边界的方法。首先定义一个up(上边界为0),down(下边界为matrix.length - 1),lef

2020-07-26 22:47:27 253

原创 剑指Offer(18)--二叉树的镜像

文章目录题目描述思路与解答题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5思路与解答使用递归,直接将左子树反转,右子树反转,交换即可。值得注意的是,反转后的结果需要先保存,左右两个都反转之后,才能赋值。/**public

2020-07-18 11:55:53 260

原创 剑指Offer(17)--树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路先找到相同的根节点,然后递归判断左子树和右子树即可。public static boolean HasSubtree(TreeNode root1, TreeNode root2) { // 只要一个为null,则返回false if (root1 == null || root2 == null) { return false; } // 从当前根节

2020-07-18 11:50:33 228

原创 剑指Offer(16)--合并两个排序的链表

文章目录题目描述思路以及解析题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路以及解析思路比较清晰,首先创建一个-1节点的新链表,然后两个链表都从头开始,循环到直到一个链表遍历到最后,谁的节点小,就加入新的链表后面。然后遍历两个链表剩下的元素,这些元素肯定比另一个链表的所有元素都大或者相等,直接加入新的链表后面即可。 public ListNode Merge(ListNode list1,ListNode list2) {

2020-07-18 02:03:50 282

原创 剑指Offer(15)--反转链表

文章目录题目描述思路与解答题目描述输入一个链表,反转链表后,输出新链表的表头。思路与解答首先,使用循环解答,不断把指向下一个的指针,指向前面的。假设链表是1->2->3->4,那么执行一次循环里面的内容的图示如下:直到head==null的时候,返回first即可。 public static ListNode ReverseList(ListNode head) { if (head == null) { return head

2020-07-17 22:18:18 260 1

原创 剑指Offer(14)--链表中倒数第k个节点

文章目录题目描述思路以及解析题目描述输入一个链表,输出该链表中倒数第k个结点。思路以及解析思路比较清晰,那就是前后指针,先让第1个指针先走k步,然后第2个指针开始走,而且两个指针一起走,直到第一个指针走到最后的位置。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solut

2020-07-12 23:17:03 418

原创 剑指Offer(13)--调整数组顺序使奇数位于偶数前面

文章目录题目描述思路与解答题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路与解答用空间换时间做法,就是新建一个数组,copy一份,先计算出奇数的个数,也就是能够知道第一个偶数应该放在数组的哪一个位置,然后再遍历一次,依次放到对应的位置即可。public class Solution { public void reOrderArray(int[] nums)

2020-07-12 23:16:14 1513

原创 剑指Offer(12)--数值的整数次方

文章目录题目描述思路以及解法题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。思路以及解法首先题目中的double类型应该不能拆解,但是int类型的整数exponet我们可以做点文章,我们平时求次方的时候,假设有个x的4次方,我们通常是求出一个x的平方数x2,然后两个x2相乘就可以得出x^4。这里思路也一样,使用递归,同时考虑边界条件。如果指数是负数,则先取反,最后取结果的倒数即可。P

2020-07-12 23:15:30 248

原创 剑指Offer(11)--二进制中1的个数

文章目录题目描述思路以及解法题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。思路以及解法首先说一个错误的解法,很多人可能会想到,那就是不断对2取余数。但是这种做法有个致命的缺陷,那就是忽略了负数,负数使用补码表示的时候,是取反之后加一,而且public class Solution { public int NumberOf1(int n) { int num = 0; while (n != 0) {

2020-07-12 23:14:37 253

原创 剑指Offer(10)--矩形覆盖

文章目录题目描述思路以及解法题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:思路以及解法先说思路,基本是递归,首先如果n为1,那么肯定只有一种,f(1)=1,如果n=2,f(2)=2但是n>2的时候呢?那么我们的思路就可以分为第一次切分长度为1,和切分长度为2来计算,也就是剩下的是f(n-1)和f(n-2),两者加起来即可。f(n)={0,n<=01,

2020-07-12 23:13:24 307

原创 剑指Offer(9)--跳台阶变态版

文章目录题目描述思路和解法题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路和解法首先青蛙一次可以跳1,2,3到n级。假设函数是f(n),则:青蛙跳到第一级是f(1)=1,只有一种跳法。青蛙跳到第二级,可以是直接跳到第二级,也可以是从第一级直接跳。所以f(2)=f(1)+1青蛙跳到第三级,可以从第0级跳,也可以从第1级跳,也可以从第2级跳。所以f(3) =f(1)+f(2)+1;依次类推,青蛙跳到第n级,可以是从0,1

2020-07-12 23:12:36 235

原创 剑指Offer(8)--用两个栈实现队列

文章目录题目描述思路和解法题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路和解法栈的特性是先进后出队列的特性是先进先出有两个栈stack1,stack2;如果有新的数据进入,那么我们可以直接push到stack1;如果需要取出数据,那么我们优先取出stack2的数据,如果stack2里面数据是空的,那么我们需要把所有的stack1的数据倒入stack2。再从stack2取数据。例如:(1). push 1–> push 2(2

2020-07-12 23:11:45 235

原创 剑指Offer(7)--跳台阶

文章目录题目描述思路及解法题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路及解法使用递归即可,首先第0级台阶是0次,第1级台阶是1次,跳上第二级台阶可以选择从0直接跳到2,也可以从1跳到2。其他情况,我们可以归纳出,要想跳到n级台阶,最后一步有两种跳法,一种是从n-1级一次跳一级,一种是从n-2级一次跳两级。f(n)={0,n=01,n=12,n=2f(n−1)+f(n−2),n>2f(n)=\begin{ca

2020-07-06 00:11:55 1926

原创 剑指Offer(6)--斐波那契数列

文章目录题目描述思路以及解答直接暴力重复利用结果题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39思路以及解答斐波那契数列大家都知道:直接暴力思路很直接,利用函数进行递归即可。public class Solution { public int Fibonacci(int n) { if(n==0){ return 0; }else if(

2020-07-05 23:51:04 279

原创 剑指Offer(5)--旋转数组的最小数字

文章目录题目描述思路代码直接遍历二分法题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路直接遍历,当出现后面的数比前面的数小的时候,就是找到了最小的数。使用二分查找,在已经排序过的数组中常用的算法。代码直接遍历import java.util.Arra

2020-07-05 23:23:19 259

原创 剑指Offer(4)--重建二叉树

文章目录题目思路代码题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路首先我们看上面的图片,首先数据保证了正确性,那么前序的第一个肯定是root节点,也就是1,那么我们需要在中序遍历中找到1的位置,左边就是这个root的左子树,右边就是root的右子树。我们可以举个栗子:对根节点的左子树进行解析:对右

2020-07-01 23:59:37 992

原创 剑指Offer(3)--从尾到头打印链表

文章目录题目描述思路以及解法借助栈实现递归调用头插法题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路以及解法????‍♂️????‍♂️首先我们需要想用哪些解法可以接,大概有如下:使用栈使用递归调用头插法借助栈实现先把元素里面的元素从头到尾遍历取出放在栈里面,然后再把栈的元素去出来放在ArraList里面。主要利用了栈的先进后出的规则,这样就可以实现倒序的功能。show you the code:/*** public class ListNode

2020-07-01 00:29:33 295

剑指Offer-V1.pdf

剑指Offer题目65题全集,V1版本只有Java解法!!!

2021-12-12

空空如也

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

TA关注的人

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