
力扣刷题
文章平均质量分 52
题目,题目链接,难易程度,解题思路,普通解法,优化解法
pre_eminent
这个作者很懒,什么都没留下…
展开
-
【持续更新】力扣刷题笔记
1.简单题序号题目难度完成日期关键字120. 有效的括号简单221. 合并两个有序链表简单326. 删除有序数组中的重复项简单427. 移除元素简单528. 实现 strStr()简单653. 最大子数组和简单783. 删除排序链表中的重复元素简单8104. 二叉树的最大深度简单9111. 二叉树的最小深度简单10121. 买卖股票的最佳时机简单原创 2022-04-10 13:57:29 · 3118 阅读 · 0 评论 -
231. 2 的幂【简单】
题目:给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。PS: n 是整数,得出 x >= 0,得出 n >= 1示例 1:输入:n = 1输出:true解释:2^0 = 1示例 2:输入:n = 16输出:true解释:2^4 = 16示例 3:输入:n = 3输出:false示例 4:输入:n = 4输出:true示例 5:输入:n = 5输出:false原创 2022-07-02 21:45:08 · 391 阅读 · 0 评论 -
226. 翻转二叉树【简单】【树】【递归】
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] 示例 2:输入:root = [2,1,3]输出:[2,3,1] 示例 3:输入:root = []输出:[] 提示:树中节点数目范围在 [0, 100] 内-100 ...原创 2022-07-02 21:19:05 · 399 阅读 · 0 评论 -
225. 用队列实现栈【简单】【队列】【模拟】
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。 注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is原创 2022-07-02 20:14:25 · 336 阅读 · 0 评论 -
206. 反转链表【简单】【迭代】【递归】
206. 反转链表【简单】【迭代】【递归】原创 2022-06-06 00:07:54 · 179 阅读 · 0 评论 -
191. 位1的个数【汉明重量】【简单】【二进制】
191. 位1的个数【汉明重量】【简单】【二进制】原创 2022-06-05 17:54:51 · 202 阅读 · 0 评论 -
160. 相交链表【简单】【哈希】【双指针】
160. 相交链表【简单】【哈希】【双指针】原创 2022-06-05 17:32:23 · 183 阅读 · 0 评论 -
144. 二叉树的前序遍历【简单】【树】【递归】【迭代】
144. 二叉树的前序遍历【简单】【树】原创 2022-06-04 00:37:11 · 166 阅读 · 0 评论 -
141. 环形链表【简单】【哈希】【双指针】
141. 环形链表【简单】【哈希】【双指针】原创 2022-06-04 00:24:02 · 214 阅读 · 0 评论 -
136. 只出现一次的数字【简单】【异或】
1. 任何数和 0 做异或运算,结果仍然是原来的数2. 任何数和其自身做异或运算,结果是 03. 异或运算满足交换律和结合律原创 2022-06-03 20:31:11 · 144 阅读 · 0 评论 -
121. 买卖股票的最佳时机【简单】【贪心】
121. 买卖股票的最佳时机原创 2022-06-03 20:18:47 · 193 阅读 · 0 评论 -
111. 二叉树的最小深度【简单】【树】【DFS】
题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 10^5] 内-1000 <= Node.val <= 1000思路:注意:与1..原创 2022-05-22 20:06:12 · 175 阅读 · 0 评论 -
104. 二叉树的最大深度【简单】【树】【DFS】
题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。思路:一句话概括:取左右子树较大深度值 + 1解法:/** * Definition for a binary tree node. * function Tre...原创 2022-05-22 17:04:33 · 160 阅读 · 0 评论 -
83. 删除排序链表中的重复元素【简单】【快慢指针】
题目:给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回 已排序的链表。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序 排列解法1:快慢指针/** * Definition for si...原创 2022-05-22 15:48:08 · 297 阅读 · 0 评论 -
53. 最大子数组和【简单】【暴力】【动态规划】
题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1] 的和最大,为6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23提示:1 <= nums.length <= 105...原创 2022-05-22 14:04:31 · 322 阅读 · 0 评论 -
28. 实现 strStr()【简单】【暴力】【KMP】
实现strStr()函数。给你两个字符串haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回-1 。说明:当needle是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当needle是空字符串时我们应当返回 0 。这与 C 语言的strstr()以及 Java 的indexOf()定义相符。示例 1:输入:haystack = ...原创 2022-05-15 23:52:10 · 181 阅读 · 0 评论 -
27. 移除元素【简单】【数组】【双指针】
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷...原创 2022-05-03 19:28:12 · 182 阅读 · 0 评论 -
21. 合并两个有序链表【简单】【链表】【双指针】
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递..原创 2022-04-26 00:24:02 · 282 阅读 · 0 评论 -
20. 有效的括号【简单】【栈】
题目给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1 <= s.l原创 2022-04-10 14:52:36 · 173 阅读 · 0 评论 -
373. 查找和最小的 K 对数字【Normal】【暴力穷举】
题目:给定两个以 升序排列 的整数数组 nums1 和 nums2,以及一个整数 k。定义一对值(u,v),其中第一个元素来自nums1,第二个元素来自 nums2。请找到和最小的 k个数对(u1,v1), (u2,v2) ... (uk,vk)。示例 1:输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3输出: [1,2],[1,4],[1,6]解释: 返回序列中的前 3 对数: [1,2],[1,4],[1,...原创 2022-01-27 22:14:49 · 115 阅读 · 0 评论 -
747.至少是其他数字两倍的最大数【Easy】
747. 至少是其他数字两倍的最大数难度简单给你一个整数数组nums,其中总是存在唯一的一个最大整数 。请你找出数组中的最大元素并检查它是否至少是数组中每个其他数字的两倍。如果是,则返回最大元素的下标,否则返回-1。示例 1:输入:nums = [3,6,1,0]输出:1解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。示例 2:输入:nums = [1,2,3,4]输出:-1解释...原创 2022-01-13 00:59:32 · 3642 阅读 · 0 评论 -
306. 累加数【Normal】【穷举】
306. 累加数难度中等累加数是一个字符串,组成它的数字可以形成累加序列。一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。给你一个只包含数字'0'-'9'的字符串,编写一个算法来判断给定输入是否是累加数。如果是,返回true;否则,返回false。说明:累加序列里的数,除数字 0 之外,不会以 0 开头,所以不会出现1, 2, 03或者1, 02, 3的情况。示例 1:...原创 2022-01-11 00:20:59 · 669 阅读 · 0 评论 -
415. 字符串相加【模拟】【Easy】
415. 字符串相加难度简单给定两个字符串形式的非负整数num1和num2,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如BigInteger),也不能直接将输入的字符串转换为整数形式。示例 1:输入:num1 = "11", num2 = "123"输出:"134"示例 2:输入:num1 = "456", num2 = "77"输出:"533"示例 3:输入:num1 = "0", num2 = "0"输...原创 2022-01-10 22:58:15 · 384 阅读 · 0 评论 -
1382. 将二叉搜索树变平衡_normal
1382. 将二叉搜索树变平衡难度中等给你一棵二叉搜索树,请你返回一棵平衡后的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是平衡的。如果有多种构造方法,请你返回任意一种。示例:输入:root = [1,null,2,null,3,null,4,null,null]输出:[2,1,3,null,null,null,4]解释:这不是唯一的正确答案,[3,1,4,null,2...原创 2020-07-27 07:23:05 · 246 阅读 · 0 评论 -
410. 分割数组的最大值_二分法_hard
410. 分割数组的最大值难度困难给定一个非负整数数组和一个整数m,你需要将这个数组分成m个非空的连续子数组。设计一个算法使得这m个子数组各自和的最大值最小。注意:数组长度n满足以下条件:1 ≤n≤ 1000 1 ≤m≤ min(50,n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自...原创 2020-07-26 00:27:12 · 306 阅读 · 0 评论 -
1011. 在 D 天内送达包裹的能力_二分法_normal
1011. 在 D 天内送达包裹的能力难度中等传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第i个包裹的重量为weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在D天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出:15解释:船舶最低载重 15 就能够在 5 天内送达所有包...原创 2020-07-25 23:34:59 · 210 阅读 · 0 评论 -
875. 爱吃香蕉的珂珂_二分法_normal
875. 爱吃香蕉的珂珂难度中等珂珂喜欢吃香蕉。这里有N堆香蕉,第i堆中有piles[i]根香蕉。警卫已经离开了,将在H小时后回来。珂珂可以决定她吃香蕉的速度K(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉K根。如果这堆香蕉少于K根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在H小时内吃掉所有香蕉的最小速度K(K为整数)。示例 1:...原创 2020-07-25 23:31:25 · 829 阅读 · 0 评论 -
124. 二叉树中的最大路径和_后序遍历_hard
124. 二叉树中的最大路径和难度困难给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出: 42解法1:...原创 2020-07-25 23:07:07 · 237 阅读 · 0 评论 -
64. 最小路径和_动态规划_normal
64. 最小路径和难度中等给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解法1:动态规划 public int minPathSum(int[][] grid) { int rows = grid.lengt...原创 2020-07-23 21:12:28 · 191 阅读 · 0 评论 -
最长公共子串_动态规划_normal
题目最长公共子串难度中等给定两个字符串text1和text2,返回这两个字符串的最长公共子串的长度。若这两个字符串没有公共子串,则返回 0。示例 1:输入:text1 = "abcdef", text2 = "defg" 输出:3 解释:最长公共子串是 "def",它的长度为 3。示例 2:输入:text1 = "abc", text2 = "abc"输出:3解释:最长公共子串是 "abc",它的长度为 3。示例 2:输入:text1 ...原创 2020-07-15 22:44:32 · 198 阅读 · 0 评论 -
120. 三角形最小路径和_动态规划_normal
120. 三角形最小路径和难度中等给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点在这里指的是下标与上一层结点下标相同或者等于上一层结点下标 + 1的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+3+5+1= 11)。说明:如果你可以只使用O(n)的额外空间(n为三角形的...原创 2020-07-14 23:27:15 · 167 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数_合并数组_hard
4. 寻找两个正序数组的中位数难度困难给定两个大小为 m 和 n 的正序(从小到大)数组nums1和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5解法1:...原创 2020-07-14 22:43:54 · 223 阅读 · 0 评论 -
41. 缺失的第一个正数_hard
题目41. 缺失的第一个正数难度困难给你一个未排序的整数数组,请你找出其中 没有出现的最小的正整数。示例1:输入: [1,2,0]输出: 3示例2:输入: [3,4,-1,1]输出: 2示例3:输入: [7,8,9,11,12]输出: 1提示:你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。分析: 遍历一次数组:如【3,2,4,1】 只需要 把介于1 和 数组长度之间的值放到原数组对应位置...原创 2020-07-12 17:25:03 · 200 阅读 · 0 评论 -
204. 计数质数_埃氏筛法
题目204. 计数质数统计所有小于非负整数n的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。分析 埃拉托色尼 筛选法(the Sieve of Eratosthenes)简称埃氏筛法, 是古希腊数学家 埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种 筛选法。 用一个boolean数组,存储n个数的状态,初始化都为true, ...原创 2020-07-11 07:42:38 · 248 阅读 · 0 评论 -
215. 数组中的第K个最大元素_优先级队列_normal
题目215. 数组中的第K个最大元素难度中等在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。分析先准备一个数组,固定大小为k这儿使用能自动排序的优先级队列...原创 2020-07-11 07:32:53 · 308 阅读 · 0 评论 -
2. 两数相加_链表_normal
题目2. 两数相加难度中等4572给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807分析首...原创 2020-07-11 07:27:30 · 155 阅读 · 0 评论 -
32. 最长有效括号_hard
题目给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。示例1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"思路扫描一遍,借用栈,将所有匹配的括号的索引处全部置字符'0'例如:"()(()"的mark为【0,0,(,0,0】再例如:")()((())"的mark为【),0,0,...原创 2020-07-05 10:29:18 · 163 阅读 · 0 评论 -
718. 最长重复子数组_normal
题目给两个整数数组A和B,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/提示:1 <= len(A), len(B) <= 1000 0 <= A[i], B[i] &l...原创 2020-07-04 19:05:18 · 166 阅读 · 0 评论 -
37.解数独_hard
题目37. 解数独难度困难445收藏分享切换为英文关注反馈编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。空白格用'.'表示。一个数独。答案被标成红色。来源:力扣(LeetCode)37.解数独链接:https://leetcode-cn.com/problems/sudoku-solver...原创 2020-06-20 23:07:38 · 712 阅读 · 0 评论 -
51.N皇后_hard
题目51. N皇后n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n皇后问题的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。示例:输入: 4输出: [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2...原创 2020-06-20 23:04:03 · 173 阅读 · 0 评论