![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
刷题
yiyexy
不要把自己当回事,要把自己做的事当回事。
展开
-
leetCode刷题之第31题
题目描述题目分析这道题实际上意思就是说,给定你数组中的几个数字,对这几个数字进行排列组合形成一个数字。给定几个数字,可以排列形成很多个数字,将这些数字按照从小到大顺序排,所谓的下一个排列就是说下一个数组顺序对应的数字是当前数组顺序对应数字顺序排列的下一个位置。当我们明白了题目意思后,我们需要额外举几个例子来发现一定的规律。这个规律就是,我们需要从末尾向前遍历,1、如果遍历到的数字,大于其后面的数字,则继续向前遍历;2、如果遍历到的数字小于其后面的数字,则应当将当前的数字进行置换,这里置换需要注意,应原创 2020-11-10 12:52:26 · 226 阅读 · 0 评论 -
LeetCode刷题之第129题
题目描述题目分析这道题其实就是在树遍历的基础上进行了一点点运算而已,因此我们选取合适的遍历方式,并且在遍历过程中进行计算就可以了。遍历方法我更倾向于使用前序遍历,因为我的算法思想如下:每遍历到一个节点,将这个节点的值乘以十,加到自己的左右孩子结点上去。这里我使用的数据结构是栈。代码import java.util.Stack;public class sumNumbers129 { public int sumNumbers(TreeNode root) { int原创 2020-10-29 11:30:09 · 191 阅读 · 0 评论 -
LeetCode刷题之第1024题
题目描述:解题思路:这道题要抓住一个核心点----新片段的有效长度。这里我定义新片段的有效长度为:新片段的终点时间 减去 已经剪辑好的大片段的终点时刻。因为我们需要计算使用的最小片段数,因此,我们要尽量寻找最大的有效长度,并更新start值。这里start值初始值为0,后面每收纳一个片段,就更新为该片段的终点时刻。则不断循环的收纳条件应当是start<T;而收纳该片段的条件为 clips[i][0]<=start。每一次大循环,正常情况下都会收纳一个片段,因此count++;需要注意的是,原创 2020-10-24 10:47:22 · 261 阅读 · 0 评论 -
LeetCode刷题之第530题
题目描述:题目分析:这道题属于简单题,因为是二叉排序树,所以中序遍历的结果就是一个有序序列,并且这个有序序列中前后元素的最小差就是我们要求的结果。因此很容易想到用递归进行中序遍历,并存储遍历产生的有序列表。但是,这道题这次我想用递归的本质----栈来进行遍历(实际上是一开始没想到怎么在递归中计算最小差)。因此,写这个博客的意义或许就是介绍一下用栈的形式遍历二叉树吧。代码:import java.util.ArrayList;import java.util.Stack;public cl原创 2020-10-17 08:43:25 · 108 阅读 · 0 评论 -
LeetCode刷题之第416题
题目描述题目分析一、首先我们很容易判断出该题种必为false的情况,情况如下:1⃣️ 当数组长度小于2时;2⃣️ 当数组所有元素值之和为奇数时;3⃣️ 当数组中最大的元素值大于数组所有元素之和的一半时;二、排除完这些错误情况后,我们需要进行这道题的真正的解题分析。这道题其实很明显的需要使用动态规划来解决,既然想到动态规划,那么我们必须要明确最关键的一点就是状态转移。真正研究状态转移之前,我们需要明确的设定一个载体。这里我们设一个布尔型二维数组dp[len][target+1](一般来说稍微复杂原创 2020-10-11 10:50:02 · 306 阅读 · 0 评论 -
LeetCode刷题之第701题
题目描述题目分析这题其实就是一个很简单的二叉排序树插入问题。首先我们需要明白一棵二叉排序树的插入过程是怎样的,对于一棵二叉排序树,我们插入一个结点时,首先是与当前树的根结点大小进行比较,如果比根节点的值大,则插入右子树部分然后对右子树进行类似操作;小则插入左子树部分,然后对左子树进行同样的操作。当我们知道此手动模拟的过程后,我们不难发现这明显是一种重复比较的过程。因此可以考虑使用递归解决,仅需要判断好什么时候递归(往左还是往右递归),什么时候插入(插入左结点还是插入右结点)即可。代码public原创 2020-09-30 18:30:37 · 161 阅读 · 0 评论 -
LeetCode刷题之第746题
题目描述题目分析这道题是典型的动态规划。说到动态规划我们首先就要想到的就是找转移方程。设函数f[i]代表的是i为终点所要付出的最低代价。则当第一个台阶和第二个台阶即为终点时所付出的代价均为0(题目中表示每次可以跨越一到两个台阶)。即f[0]=0,f[1]=0。当i大于1时,那么此时到达终点所需要付出的代价(即状态转移公式)为:f[i] = min( f[i-1]+cost[i-1] , f[i-2]+cost[i-2])。写出此状态转移公式以及初始化情况,那么代码自然就不是问题了,下面是代码展示原创 2020-07-11 16:22:14 · 240 阅读 · 0 评论 -
LeetCode刷题之第74题
题目描述题目分析这道题从题意可以很轻松就能看出,它是一个严格的排序数组,每一行是顺序的,每一列也是顺序的,知道这一点做这道题就很简单了。我采用的方法是:① 把每一行的第一个数字赋值到一个一维数组上,方便判断我们的目标数字在哪一行上;② 确定好行数后,再将该行的一行数字赋值到另一个一维数组上,在该一维数组上调用Java的进行二分查找的方法,用来判断是否有目标数。在这两个步骤中都有需要注意的点,步骤一中需要注意如何确定好行的位置,步骤二中需要注意调用库的二分查找方法,当没有查找成功时,该方法返回的是什么原创 2020-07-08 09:31:47 · 722 阅读 · 0 评论 -
LeetCode刷题之第86题
题目描述:题目分析:本题最重要的还是弄清楚链的特征,保证不能断链。这题我相当于使用了两个链来完成,其实可以在原链的基础上完成,因为一开始没想到设置虚拟头结点,所以对于第一个数就小于x的情况有点难办。后面使用两个链解决的过程中,想到了虚拟头结点,但是双链也就浪费一点空间,时间复杂度不变,所以这里不再重新写前面的实现方式了。代码实现:package LeeCode;public class partition86 { public static void main(String[] arg原创 2020-06-08 17:20:54 · 221 阅读 · 0 评论 -
LeetCode刷题之第61题
题目描述:题目分析:这道题我一开始竟然使用的是递归去解决(捂脸),确实太丢人了,最后提交的时间和空间的耗费排名可想而知。而后看到了评论区有说所谓的右移,其实就是根据给的数k重新选择第(节点数-k)个结点作为头结点,然后尾结点连接上原来的头结点即可,这句话简直就是一语中的。知道了这种思想,我就去实现它去。结果出来后,时间上果然要比我的原先的代码优秀不少。代码:public class Ro...原创 2020-05-02 15:26:32 · 200 阅读 · 0 评论 -
LeetCode刷题之第55题
题目描述:题目分析:这道题我觉得最关键的是要知道在当前位置所能达到最远的距离是多少。比如第i个下标处所能达到的最远距离是i+nums[i],那么如果j<i+nums[i],那么比可以从i到达j处。因此我们只需要时刻维护好这个最远距离,当最远距离大于等于最后一个元素的下标时,我们就说肯定能够到达。但是需要注意的是,尽管最远距离应该保持在max(max,i+nums[i]),但是我们...原创 2020-04-30 16:13:28 · 162 阅读 · 0 评论 -
LeetCode刷题之第54题
题目描述:题目分析:这道题目最关键的应当是掌握好边界问题,我们可以把一圈螺旋作为一次循环,设置一个计数变量,用来记录当前循环到的圈数并用来计算下一圈的开始位置。需要注意的是当二维数组并不是一个正方形时,可能会产生错误,我对于这个问题的解法是每次跑完一圈中的一个边,我都去判断一下是否已经跑完(跑完的标准很简单,就是添加到list集合的数据等于数组中的数据),跑完了则直接退出。这里面对于“[]”...原创 2020-04-29 15:36:37 · 203 阅读 · 0 评论 -
LeetCode刷题之第24题
题目描述:题目分析:这道题目考察的就是链式节点的置换,但是需要注意三点:1、注意输入的链表为空时,进行判断;2、处理链表最末尾时,需要注意处理好只剩一个节点或无节点的情况;3、注意另外申请一个节点,防止生成的链表断链。代码:public class SwapPairs { public static void main(String[] args) { ListN...原创 2020-04-28 15:54:45 · 161 阅读 · 0 评论 -
LeetCode刷题之第33题
题目描述:题目分析:这道题目中要求的时间复杂度,反而是一种提示,看到这个时间复杂度自然会想到使用二分查找。唯一的问题是这个数组有别于一般的有序数组,那么该如何合理使用二分查找呢?我这里使用的方式是根据特点,将一个数组分成前后两个分数组,然后根据这两个分数组分别进行二分查找即可。代码:public class Search { public static void main(Str...原创 2020-04-27 15:57:59 · 180 阅读 · 0 评论 -
LeetCode刷题之第23题
前言:这道题也就是LeetCode每日一题活动的4月26日的那一题题目描述:题目分析:这道题最核心的应该是要想到两条有序链合并的情况,只要了解两条有序链合并的情况,这道题就很好解决了。代码:public class MergeKLists { public static void main(String[] args) { ListNode[] lists =...原创 2020-04-26 16:02:45 · 184 阅读 · 0 评论 -
LeetCode刷题之第3题
题目描述:题目分析:刚看到这道题我就觉得这道题可能最占时间的就是查找,刚好Java中有一种数据集合叫做List,该数据类型可以直接查找数据中是否含有某元素。故而我选择了这个数据类型来解题。这里可以采用双指针,用j指向子串的第一个字符,用i指向遍历到的字符。当list集合中包括了当前遍历到的字符时,我们将j指向重复字符的后一个位置,每一次循环都更新一下最大长度len。代码:import ...原创 2020-04-25 15:10:12 · 244 阅读 · 0 评论 -
LeetCode刷题之第2题
题目描述:题目分析:这题我刚拿到手就想着要还原成数字,然后进行相加,其实题目已经有提示了,每个节点都是个位数,最好的方法其实是使用节点相加进位,但是既然选择了一条路,我就一条路走到黑了,总的来说用数字相加的方式简单,但是从他的测试用例我知道了,有些用例的数实在是大,数据类型改了又改,实在不行,上大数了,总算通过了。代码:import java.math.BigInteger;publ...原创 2020-04-24 17:10:26 · 219 阅读 · 2 评论 -
LeetCode刷题之第160题
题目描述:题目分析:这道题从表面上看我们应该从头到尾进行,但是仔细分析题目不难发现,两条链相交节点之前的节点数并不相同,因此无法进行遍历比较。这是后我们不难想到可以从尾部出发,但这是一条单链表,我们该如何从尾部向前进行遍历呢???不难想到一个数据结构,那就是栈,它具有先进后出的性质,我们可以遍历单链表,然后压栈,这样我们就拥有了两个倒序的链表栈顺序了,再掐准比较两个链表相交节点的情况,可以很...原创 2020-04-22 21:31:17 · 180 阅读 · 0 评论 -
LeetCode刷题之第125题
题目描述:题目分析:这道题最初看到的难度就是如何去除字符串中的非字母和数字部分。这里我采用的是通过ASCII码来进行分辨,并将纯净的字符串数值保存起来。还需要注意的是不要忘记对数字的判定,提交时的测试用例“0P” 是零p,不是哦P,刚开始看到这个错误和我运行的不一样时候,我刚准备生气,然后就反应过来了。代码:public class Palindrome2 { public s...原创 2020-04-20 20:23:27 · 154 阅读 · 0 评论 -
LeetCode刷题之第122题
题目描述:题目分析:这题乍一看似乎有点复杂,但是仔细分析就不难发现,其实判断我当前的操作到底是应该买入还是卖出,只需要跟明天比较即可,同时需要一个布尔值,用来判断当前是否持有股票。代码:public class MaxProfit2 { public static void main(String[] args) { int[] prices = {7,6,4,3...原创 2020-04-19 22:37:27 · 187 阅读 · 0 评论 -
LeetCode刷题之第111题与第118题
第111题题目描述:题目分析:这题一定要注意题目所说的最小深度,其实是根节点与其最近的叶子结点之间的距离,故而要注意叶子结点这个关键条件。代码:public class MinDepth { public static void main(String[] args) { TreeNode root = new TreeNode(1); roo...原创 2020-04-17 20:39:42 · 111 阅读 · 0 评论 -
LeetCode刷题之第110题
题目描述:题目分析:这里平衡的评判标准就是某一棵树的左右子树深度之差是否满足不超过一,所以接下来的任务就简单了,任务一:计算某子树的深度;任务二:遍历当前树的所有节点;对于任务一,只需要明白递归终点是节点为空以及每遍历一层深度加一即可;对于任务二可以使用任意一种(本文使用的是先序遍历)遍历方法,递归遍历即可。代码:public class IsBalanced { publ...原创 2020-04-16 17:39:04 · 167 阅读 · 0 评论 -
LeetCode刷题之第100题
打卡,简单题之100题/** * 给定两个二叉树,编写一个函数来检验它们是否相同。 * 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 */ class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }...原创 2020-04-14 22:05:26 · 187 阅读 · 0 评论 -
LeetCode刷题之83题与88题
大家好,从今天起 我就要准备正式刷题了,先从简单题刷起,没错,83和88题都是简单题,因此没什么思路或总结好说,只有第88题需要注意一下不可以直接用一个数组给另一个数组赋值,否则地址会变,结果自然就是错误的。第83题:/** * 83、删除排序链表中的重复元素 * 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 * * 示例 1: * 输入: 1->1->...原创 2020-04-13 22:36:01 · 312 阅读 · 0 评论