自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 问答 (1)
  • 收藏
  • 关注

原创 【Java实现】剑指Offer10.2——青蛙跳台阶:思路分享

传送门:斐波那契数列相关问题思路详解:【Java实现】剑指Offer10.1/10.2——斐波那契数列/青蛙跳台阶:三种思路分享这道题可以变成斐波那契一样的题,只不过条件(F(0)不同)有一丢丢变化,剩下的完全一样这篇主要讲如何转化成斐波那契数列问题。思路跳到第n级台阶,上一步可能跳了1级,或者跳了2级,所以分成两种情况:如果上一步是1,那么之前的n-1步,有多少种方法?如果上一步是2,那么之前的n-2步,有多少种方法?因此:f(n)=f(n-1)+f(n-2)这里理解了的话, .

2021-03-06 17:45:57 130

原创 【Java实现】剑指Offer10.1/10.2——斐波那契数列/青蛙跳台阶:三种思路分享

同学们,下方传送门:青蛙跳台阶的问题首先看到这道题后,我们能够自己继续递推:0,1,1,2,3,5,8...同时,能够得到n,n-1,n-2之间的关系:F(n)=F(n-1)+F(n-2)再配合上面给到的初始条件,第一种思路也就产生了——递归。思路1:递归想到递归,先找到构建递归的条件:终止条件本问题和子问题解的关系以上问题,我们都有答案,直接上代码:class Solution { public int fib(int n) { if(n==0).

2021-03-06 17:37:48 125

原创 【Java实现】剑指Offer32.3——从上到下打印二叉树(三):之字形打印二叉树

同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:建议参考以下两道题,循序渐进:剑指Offer32.1——从上到下打印二叉树剑指Offer32.2——从上到下打印二叉树(二)这道题我自己写了好久,每次都是卡在某个测试用例,非常崩溃,最后看了大神的解法,觉得豁然开朗,自己的问题在于:没有控制好奇偶层和出队列顺序的关系,导致十分混乱这么说大家可能难以理解,回到这道题,我们先想一下逆序打印,共有几种方法?前提:返回值要求是List<List<Int.

2021-02-07 17:23:08 231 2

原创 【Java实现超级高频面试题,字节半年16次】剑指Offer32.2——从上到下打印二叉树(二)(LeetCode102:二叉树的层序遍历)思路分享

同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:题目分析:层序遍历、广度优先(BFS)一般都是借助队列的!!!这道题建议参考二叉树的深度,其中的第二种解法——层序遍历,用队列的思想巧妙地实现。不同于上一道题从上到下打印二叉树,这道题要求每一行输出一个数组,而不是一个一维数组,需要变成二维数组所以问题的难点就来了:怎么确定哪些元素是来自同一行呢??接下来介绍两种方法,能够很巧妙地确定元素的行所属:方法一:两个辅助队列这个方法就是二叉树的深度中使用.

2021-02-04 16:01:09 141

原创 【Java实现高频面试题】剑指Offer32.1——从上到下打印二叉树:思路分享

同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:题目分析:层序遍历、广度优先(BFS)一般都是借助队列的!!!这道题建议参考二叉树的深度,其中的第二种解法——层序遍历,用队列的思想巧妙地实现。算法步骤:借助队列FIFO的思想,首先创建队列,将根节点加入创建收集结果的list集合,由于不知道节点的个数,所以先用集合进入循环,循环的目的是将队列清空,因此终止条件是队列为空第一次循环时,先从队列中poll()出来一个,把其val加入集合然后判断这个点是.

2021-02-04 14:43:39 135

原创 【Java实现】剑指Offer26——树的子结构:思路分享(类比树的对称)

同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:题目分析:递归!递归!递归!遇到树的问题首先想到递归!判断是不是子结构——就是要判断一棵树能否包含另一棵树——遍历两个树看是否一致举个栗子:如图所示,给定两棵树:首先判断根节点,也就是3和4,如果根节点相等,就继续同时遍历两棵树,看其他部分是否相同,我们把上述遍历来看是否完全相同的方法定义为recur如果根节点不同,则递归到主树的左右子节点,也就是4和5,分别判断这两个值和目标根节点是否相等,如果.

2021-02-04 13:33:19 102

原创 【Java实现】剑指Offer28——对称的二叉树(LeetCode101:对称二叉树)思路分享

同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:解题思路:递归!递归!递归!还是那句话,看到树首先就要想到递归!为什么看到树就要想到递归呢?因为从根节点出发,每棵树都可以看做是由左右子树加根节点构成,只不过左右子树是树还是叶子节点的问题。这道题而言,由于前面刚做过二叉树的镜像,因此就有了第一种思路:思路一:先镜像再判断,只需判断是否完全一样如果一棵树在镜像前后完全一样,那么这棵树一定是对称的注意:不能改变树的原始结构,需要先复制,再镜像才行.

2021-02-04 11:45:47 96

原创 【Java实现面试高频】剑指Offer07——重建二叉树(LeetCode105:从前序与中序遍历序列构造二叉树)最详细思路分享

同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:题目分析:递归!递归!递归!遇到树的问题首先想到递归!要明白重建二叉树如何重建,需要哪些关键因素?就在找根节点,然后去他的左右子树继续寻找根节点,直到左右子树为空的叶子节点原理:当我们知道一颗二叉树的中序排列,再任意知道前序和后序的一种,便可以还原整棵二叉树这个原理大家试一下就明白了,简单来说因为中序遍历的结果能够帮我们将树分成左右两部分,算出左右子树的节点个数,去前序分别取出各自的前序,这样就可.

2021-02-04 10:38:06 159

原创 【Java实现】剑指Offer27——二叉树的镜像(LeetCode226:反转二叉树)思路分享

同学们,我把《剑指Offer》中所有“树”标签的习题及思路整理出来了,对照学习效果更佳:解题思路:递归!递归!递归!看到树首先就要想到递归!镜像,用在二叉树上,无非就是左右颠倒,也就是左子树变成右子树,右子树变成左子树。这个想法天然适合使用递归。算法步骤:设定一个递归的终止条件:也就是root==null实现左右子节点的位置互换递归左右子树全部完成后返回root注意理解!递归过程的代码从上至下依次执行!也就是说,左右子树的两句递归代码全部执行完后,才会返回root代码如下.

2021-02-03 17:26:54 154

原创 【Java实现】剑指Offer54——二叉搜索树的第K大节点(利用BST的性质遍历)思路分享

【Java实现】剑指Offer54——二叉搜索时的第K大节点(利用BST的性质遍历):思路分享关于二叉搜索树的一些学习笔记在这里哦:接下来几期内容会更新《剑指Offer》中所有“树”标签的习题及思路,传送门在此:解题思路:从题目看到二叉搜索树,就要联想到BST的性质:中序遍历是递增的我们都知道二叉树的中序遍历:先遍历左子树,然后根节点,最后右子树既然BST这样遍历能得到递增序列,那如何得到递减序列呢?先遍历右子树、然后根节点、最后左子树,即可得到递减序列到这里,大体的思路已经

2021-02-03 17:09:36 134

原创 【Java实现】剑指Offer55.1——二叉树的深度解题分享(LeetCode104:二叉树的最大深度)思路分析

【Java实现】剑指Offer55.1——二叉树的深度(LeetCode104:二叉树的最大深度):思路分享接下来几期内容会更新《剑指Offer》中所有树标签的习题及思路,传送门在此:题意解析:给定一棵二叉树,想要求出这棵树的最大深度,通俗来讲:就是求这棵树的最大层数或者:求出左右子树哪一个往下走的比较深因此,这道题就存在两种解法,深度遍历(DFS)和层序遍历(BFS)解法一:深度遍历当我们深度遍历一棵树时,以后序遍历为例:首先遍历根节点的左子树然后遍历根节点的右子树最后遍历

2021-02-03 15:54:58 126

原创 【Java实现】剑指Offer59.2——队列的最大值(双端队列)

剑指Offer59.2——队列的最大值:利用双端队列思路分析这道题的思路和另一道题很像,大家可以参考一下:【Java实现】剑指Offer30——包含min函数的栈(LeetCode155:最小栈,左神基础班的白给题)思路解析:由题意,要求时间复杂度是O(1),因此考虑另一个队列记录最大值。和getMinStack的想法很像,只不过由于队列的特殊性,无法保证help队列(辅助队列)的单调性。(解释:在getMinStack中,每次新加入数的时候,取help栈顶进行比较,如果小就入栈,大就复制栈顶

2021-01-05 21:37:37 190

原创 【Java实现】剑指Offer30——包含min函数的栈(LeetCode155:最小栈,左神基础班的白给题)

数组、栈、队列的互相实现,都是白给题哦,链接如下:【Java实现】剑指Offer09——用两个栈实现队列(左神基础班的白给题)题意分析:实现一个栈,包含返回栈中最小元素的功能思路分析:设计两个栈结构data和min,min栈用来存最小值,能够做到getMin也是O(1),也就是从第二个栈顶弹出data栈每次压入一个数,去min栈判断:如果min空,则也压入;如果不为空,则判断min栈顶的值两种设计方法:对齐压入:无论每次压入的数是不是最小值,min栈都压入一个数,这样出栈可以无.

2021-01-05 17:58:16 210

原创 【Java实现】剑指Offer09——用两个栈实现队列(左神基础班的白给题)

剑指Offer09——用两个栈实现队列:思路分享数组、栈、队列的互相实现,都是白给题哦,链接如下:解题思路:我们都知道,栈是先进后出的,那怎么用这样的结构实现队列先进先出的功能呢?秘诀就是用两个栈假设有两个栈,data和help如何实现:每次队列要poll()数据出去之前,只需将第一个栈data中的数据,挨个pop()出来,再push()进辅助栈help,这样顺序就颠倒过来了,再pop(),就能达到和队列一样的效果。例如:数列1、2、3、4、5按顺序进data栈,按理来说出栈的顺序是

2021-01-05 16:03:59 207

原创 【Java实现滑动窗口】剑指Offer57.2——和为s的连续正数序列

剑指Offer57.2——和为s的连续正数序列:思路分享解题秘钥:滑动窗口!!!在脑海中幻想出一个连续正整数序列的数组,分别设两个指针,指向数组的索引,这两个索引中间的部分我们称之为窗口!这道题里,用这个窗口中数值相加的和与target作比较,每次经过判断,窗口扩大或缩小窗口定义为左闭右开。设窗口的左右两端分别为i,j,起始在1的位置,窗口不包含任何数。这里的幻想指的是不用在代码中创建出真实的数组代码中有几点需要注意:窗口的扩大和缩小,都是同向的:当sum+j时,j也要向后移;当su

2021-01-04 16:09:31 682 8

原创 【Java面试真题】剑指Offer53.2——0~n-1中缺失的数字(异或、二分两种解法)

【Java实现】剑指Offer53.2——0~n-1中缺失的数字:面试真题,两种思路分享前面有另一道面试题【Java实现】剑指offer53.1——在排序数组中查找数字(LeetCode34:在排序数组中查找元素的起始位置)都是二分类型的,可以借鉴一下思路题意解析:这道题很特别,所有的测试用例都很有特点,都是形如[0,1,2,3,5,6,7]这样的,突然跳跃这个数值的索引,即是问题的解具体如下:前半部分数组中:索引和数值相等后半部分数组中:索引比数值小1第一种:二分思想不同于以往

2021-01-03 21:30:02 850 6

原创 【Java实现】剑指offer53.1——在排序数组中查找数字(LeetCode34:在排序数组中查找元素的起始位置)

剑指offer53.1——在排序数组中查找数字(LeetCode34:在排序数组中查找元素的起始位置):思路分享《剑指offer》题目和LeetCode主站本质是一样的,想要找到target数目,也需要找到左右边界题目解析:在一个排序数组中,找到target的左右边界,从而得到target的数量第一感觉:二分查找,因为数组是有序的灵感闪现!!! 灵感闪现!!! 灵感闪现!!!给定一个数字target,找到它在排序数组中插入的位置!!!这道题就是二分插入!你品,你细品!下面说一下具体

2021-01-03 19:49:39 2365 10

原创 【Java实现高频】剑指offer29——顺时针打印二维数组(LeetCode54:螺旋矩阵)

剑指offer29——顺时针打印矩阵(力扣54:螺旋矩阵):思路分享思路解析:找到左上角和右下角,就能够将一圈的数字打印出来!打印完一圈后,只需要左上角的坐标+1,右下角的坐标-1,循环即可循环判断条件就是左上角的坐标<=右上角的坐标步骤分析:找到左上角和右下角的坐标,设为(tR,tC),(dR,dC)判断二维数组是否为空,然后进入循环循环终止条件:是左上角和右上角重合进入循环判断是否为同一条直线,然后按顺序打印”上、右、下、左“四条边,每次循环结束,都要改变起始坐标注意!

2021-01-03 16:39:14 1795 6

原创 【Java实现】剑指offer04——二维数组中的查找(LeetCode240:搜索二维矩阵)

剑指offer04——二维数组中的查找(搜索二维矩阵):思路分享首先分析一下题目:有一个很有个性的二维数组:每行从左到右递增,每列从上到下递增。然后给你一个数,让你去矩阵里面找有没有这个数。思路:乍一看这个题目,大部分同学会想到暴力破解,这样可以说是毫无含金量,那题目还给你这么多条件干啥?因此,我们再次观察矩阵,发现两个特殊的位置:左下角、右上角以右上角为例,设为flag:它所在的行都比他小,而它所在的列都比他大,如果我们获取到它的值,通过与target对比,一次就能干掉一行或者一列的数!

2021-01-02 18:44:58 624

原创 【Java实现】剑指offer03——找到数组中的重复数字

剑指offer03——找出数组中的重复数字:思路分享话不多说,先介绍两种解题思路:(1)要找重复元素,想到用Set集合因为Set不能存放重复元素,返回值是布尔类型。因此首先建立一个HashSet,然后把数组的元素依次加入set,遇到添加失败的直接break循环,返回值即可。这种方法的时间复杂度是O(n),空间复杂度也是O(n)。代码如下:class Solution { public int findRepeatNumber(int[] nums) { //创建一个Se

2021-01-02 16:27:48 673

空空如也

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

TA关注的人

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