LeetCode
文章平均质量分 93
日常刷 LeetCode 的解题思路记录与分享。
卤小蛋学编程
这个作者很懒,什么都没留下…
展开
-
【LeetCode Top 100】2. Add Two Numbers【Medium】【JAVA】
2. Add Two Numbers(Medium)题意:即两个链表代表两个整数,相加的结果也放到一个链表中。思路:本题虽然是中等难度,但相对容易。对于两个整数相加,我们正常的做法就是列竖式,从低位开始相加,到高位,超过十则向前进一。而链表刚好是从数的低位指向高位,因此只需按照正常两个数相加的方式,从低位(即链表头)进行相加的方式进行,只需注意进位的情况,以及最后可能数位会长于两个加数的情...原创 2019-10-28 22:46:45 · 202 阅读 · 0 评论 -
【LeetCode Top 100】11. Container With Most Water【Medium】【JAVA】
1. 题目2. 题意题目的意思是一个数组,数组的每个值代表一个柱子的高度,求所有柱子两两组合中,两个柱子跟x轴组成的区域最大容纳水的量。转换为数学关系就是所有垂直x轴的线段两两组合,每个组合的值为两个线段之间的距离与两条线段中较短线段的乘积。3. 思路最容易的思路就是,将所有的情况进行遍历,即循环遍历每种情况,暴力法求解,时间复杂度为O(n²)。然后我们考虑如何降低时间复杂度,我们可以考...原创 2019-12-07 20:30:06 · 164 阅读 · 0 评论 -
【LeetCode Top 100】49. Group Anagrams【Medium】【JAVA】
1. 题目2. 题意对输入的N个字符串进行分组,分组的依据为:同组内的字符串拥有相同的字母组合,排列顺序可以不同。3. 思路3.1 思路一分类可以想到的就是Map这个数据结构,可以通过特定的Key值,将不同的元素放入到不同的key下进行分类。而我们分类的依据是字符串拥有相同的字符组合,但顺序可以不同,那我们可以考虑将字符串字符组合的调整顺序,都是升序排列,得到的新字符串可以做为对应组的...原创 2019-12-08 01:40:42 · 194 阅读 · 0 评论 -
【LeetCode Top 100】647. Palindromic Substrings【Medium】【JAVA】
1. 题目2. 题意题目比较好理解,即计算出有多少个回文子串,同时位置不同的相同回文子串,将被视为两个。3. 思路3.1 思路一因为位置不同的回文子串需要被重复计数,比较简单的想法,就是将所有的可能的组合都列出来,并判断每一种是否是回文子串。这样代码思路比较简单,但运行时间一定是较长,根据这个思路可再进一步简化。对于回文子串的判断,我们一般简单的办法是从中间向两边进行扩展,即对于a,...原创 2019-12-19 23:10:35 · 160 阅读 · 0 评论 -
【LeetCode Top 100】448. Find All Numbers Disappeared in an Array【Easy】【JAVA】
1. 题目2. 题意题目很好理解,需要注意的是范围是[1,n],跟数组下标范围[0,n-1]刚好相差了1。3. 方法一3.1 思路由于数字范围刚好大于数组下标范围1,最简单的思路,构造一个大小为n的boolean类型的数组boolean[] isContain,isContain[i]代表数组中是否包含了数字i+1。从头到尾遍历整个数组,对每个值val,将isContian[val-1...原创 2019-12-23 00:39:53 · 166 阅读 · 0 评论 -
【LeetCode Top 100】287. Find the Duplicate Number【Medium】【JAVA】
1. 题目2. 题意题意较为容易理解,即有一个找出重复数。3. 思路如果可以使用其他额外空间的话,可以直接用另外一个数组进行记录,或者使用HashMap来记录各个数值出现的次数,但该题目要求只能使用额外O(1)的空间,所以我们应该考虑如何通过修改原有数组的值来记录数值出现的次数。第一种思路可以直接进行排序,最终遍历排序结果,看哪个数值有两个相同的值相邻,即为重复的值。第二种思路,由于...原创 2020-01-16 23:19:15 · 181 阅读 · 0 评论 -
【LeetCode Top 100】48. Rotate Image【Medium】【JAVA】
1. 题目2. 题意题目很好理解,即将一个矩阵旋转90度,这里要注意是顺时针旋转,不能搞混旋转的方向。3. 思路旋转4. 代码5. 运行结果6. 相关链接本题代码的github链接其他 Top 100 Liked Questions 题目...原创 2020-02-01 19:08:31 · 182 阅读 · 0 评论 -
【LeetCode Top 100】56. Merge Intervals【Medium】【JAVA】
1. 题目2. 题意题目很好理解,就是输入多个时间碎片,现在需要尽可能把碎片进行合并,求合并后的结果。3. 思路一个比较容易想到的思路,维护一个当前的合并之后的时间碎片组,通过遍历所有的时间碎片,不断向合并之后的时间碎片组加入新的时间碎片,并将其进行合并整理即可。最佳的时间复杂度为O(n),即每次加入的碎片都可以进行合并,维护的合并之后的时间碎片组永远只有一个碎片。最差的时间复杂度为O(...原创 2020-03-14 00:48:53 · 292 阅读 · 0 评论 -
【LeetCode Top 100】406. Queue Reconstruction by Height【Medium】【JAVA】
1. 题目2. 题意有 n 个 (h, k) 对,h 代表高度,k 代表这个对在队列中的位置,在它的位置前面,有 k 个对的高度,比它高或等高。例如 (7, 0),代表其高度为 7,在它前面有 0 个高度不小于它的对。(4, 4) 代表其高度为 4,在它前面有 4 个高度不小于它的对。3. 思路这道题,官方的提示是:让你去找出最小高度的数的位置。首先,我们先假设没有相同高度的对存在...原创 2020-03-22 00:40:20 · 231 阅读 · 2 评论 -
【LeetCode 1024】视频拼接 Video Stitching
题目:题意为:用一个chips[][]数组来记录一些视频片段,chips[i][0]记录开始时间,chips[i][1]记录结束时间,给定一个最终要到达的时间点,求判断给定的视频片断,能否拼凑到要求的时间点,如果能到达,问最少需要多少个视频片段可以完成。举例:举例部分,例如第三个例子,里面的视频碎片中,选取[0,4]、[4,7]、[6,9]这三个片段,刚好可以到达时间点 9,因此需要的最...原创 2019-04-09 00:27:22 · 9282 阅读 · 0 评论 -
【LeetCode 1014】最佳观光对 Best Sightseeing Pair
LeetCode 1014题,属于数组类型的题目,题意:翻译成中文,就是要找数组中的两个点,满足:A[i] + A[j] + i - j的值最大且 i < j思路:最快速的想法,就是直接暴力求解:因为实际上就是求符合题意的两个点能获得的最大值,直接两个循环: public int maxScoreSightseeingPair(int[] A) { ...原创 2019-04-05 12:50:17 · 502 阅读 · 0 评论 -
【LeetCode 225】用一个or两个队列实现栈
Implement Stack using Queues原创 2019-03-15 21:27:15 · 231 阅读 · 0 评论 -
【LeetCode 983】门票的最低费用 Minimum Cost For Tickets
题目:即,给定一个数组代表你一年中的什么时候会去电影院,给定另外一个数组代表一日票,七日票,跟三十日票的金额,要求出如何买票,才能使花费最少。思路:明显看出这个是一个动态规划的题目,因此我需要两步曲来完成,首先是状态的定义,我们发现,比如 days[1,2,3,5],我们要输出的是第5天所花费的最少金额,而且 days是严格递增的,所以我们只要求出第days[days.length - ...原创 2019-03-17 15:31:30 · 564 阅读 · 0 评论 -
【LeetCode 105 106 889】重建二叉树(给定树的前中后序遍历方式中的两种来重建二叉树)
树的常见遍历方式有:前序遍历,中序遍历,后序遍历,层序遍历,关于这些遍历方式的递归和非递归实现:https://blog.csdn.net/Applying/article/details/84982712现在,如果给定前中后序遍历方式中的两种,如何重建二叉树呢?文章目录从前序和中序遍历构建二叉树从后序和中序遍历构建二叉树从前序和后序遍历构建二叉树从前序和中序遍历构建二叉树这个是三种情况中...原创 2018-12-17 23:14:44 · 886 阅读 · 0 评论 -
【LeetCode 136 137 260】 只出现一次的数字Ⅰ、Ⅱ、Ⅲ (Single Number)
LeetCode 第136、137、260刚好都是同一类型的题目:只出现一次的数字,放在一起进行整理文章目录136. 只出现一次的数字Ⅰ137. 只出现一次的数字Ⅱ260. 只出现一次的数字Ⅲ136. 只出现一次的数字Ⅰ给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗...原创 2018-10-18 22:32:14 · 440 阅读 · 0 评论 -
【LeetCode】130. Surrounded Regions【Medium】【JAVA】
1. 题目2. 题意图形中有两类字符,'X',‘O’ 两种字符,如果 O 被 X 包围住,则需要将 O 转为 X。3. 思路我们需要将被包围住的 O 去除,这个其实比较麻烦,因为需要确实四周都是 X,这里采用一个相反的思路,即我们将不被包含的字符 O 进行标记,剩余没有被标记的 O,全部置为 X 即可。而我们如何确定字符 O 没有被包围?我们通过观察,可以知道,与边有接触的 O,即为不...原创 2020-04-24 23:10:58 · 218 阅读 · 0 评论 -
【LeetCode】Best Time to Buy and Sell Stock Ⅰ、Ⅱ、Ⅲ【Java】
121. Best Time to Buy and Sell Stock题意为只可买入一次,并卖出一次,要求获取的利润最高。最简单的思路就是两层循环,比较每一个数与后面的数的差值,以求出当前能获取的最大差值,即为最大利润,算法的时间复杂度即O(n²)。我们可以考虑优化算法,我们每获取一个数时,我们其实只需要跟这个数之前最小的那个数做比较,就可以知道这个为出口时,能获取的最大利润值,再通过比较所...原创 2020-04-04 15:03:49 · 272 阅读 · 3 评论 -
树、二叉树的前中后层序遍历(递归、非递归Java实现)
文章目录1. 二叉树的前中后序遍历(递归,非递归)以及层序遍历1.1 二叉树前中后遍历的递归解法1.2 二叉树前中后遍历的非递归解法1.2.1 非递归的前序遍历:(LeetCode 144)1.2.2 非递归的中序遍历:(LeetCode 94)1.2.3 非递归的后序遍历:(LeetCode 145)1.3 层序遍历:(LeetCode 102、103、107)2 树的前中后层序遍历2.1 前序...原创 2018-12-14 00:22:01 · 4854 阅读 · 1 评论 -
LeetCode 有关树深度、路径的题目(JAVA代码实现)
文章目录1. 路径相关的题目112.路径总和113.路径总和 II437.路径总和 III124.二叉树中的最大路径和257.二叉树的所有路径2. 深度相关的题目111.二叉树的最小深度559.N叉树的最大深度834.树中距离之和863.二叉树中所有距离为 K 的结点865.具有所有最深结点的最小子树3. 其他长度相关的题目543.二叉树的直径563.二叉树的坡度662.二叉树最大宽度1. 路径...原创 2018-12-27 23:24:24 · 918 阅读 · 0 评论 -
【LeetCode 1358】Number of Substrings Containing All Three Characters【Medium】【JAVA】
1. 题目2. 题意题目几个关键信息:该字符串只包含’a’,‘b’,'c’三种字符示例1中发现对于相同但是位置不同的子串,是按两个结果计算,无需去掉重复该字符串长度默认大于33. 方法3.1 思路最简单的思路就是暴力法,直接两个循环,并判断结果字符串是否都包含了’a’,‘b’,'c’三种字符。但该方法时间复杂度较高,O(n²),因此考虑有没有简单的做法。题目是求符合条件的子...原创 2020-02-23 11:44:44 · 270 阅读 · 0 评论 -
【LeetCode 89】格雷编码 构建法和自然二进制编码转化法
题目:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。解题:首先,补充一下格雷码的含义:在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码。例如,位数为2格雷码的其中一个序列:00,01,11,10,它们任意两个相邻的数值,只有一个位数不同。...原创 2018-10-09 23:46:36 · 832 阅读 · 0 评论 -
链表相关题目总结(含leetcode链表题Java代码)
链表是最常见的数据结构之一,下面主要总结题目,不涉及基本的数据结构的介绍文章目录1. 常见的链表操作题目1.1 链表倒置(leetcode 206)1.2 两个有序链表的合并(leetcode 21)2. leetcode 其他相关题目No.83 Remove Duplicates from Sorted ListNo.237 Delete Node in a Linked List (删除链...原创 2018-12-03 16:44:11 · 712 阅读 · 0 评论 -
【LeetCode 45 55 1306】Jump Game I,II,III【JAVA】
跳跃游戏,合计三道题。55. Jump Game1. 题目运行结果45. Jump Game II1. 题目:运行结果运行结果1306. Jump Game III1. 题目运行结果原创 2020-01-18 11:46:38 · 269 阅读 · 0 评论 -
【LeetCode 1305】All Elements in Two Binary Search Trees【Medium】【JAVA】
1. 题目题目链接:https://leetcode.com/problems/all-elements-in-two-binary-search-trees/2. 题意题目要求是合并两个搜索二叉树,合并成为一个List3. 方法3.1 思路比较简单的做法,由于两棵树都是二叉搜索树,通过中序遍历,输出有序的数组,再将两个数组进行合并,时间复杂度上为O(n)。3.2 代码 p...原创 2019-12-29 16:33:40 · 226 阅读 · 0 评论