![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode笔记
文章平均质量分 58
力扣分类刷题笔记
乄黎卿
人面不知何处去 桃花依旧笑春风
展开
-
1894.找到需要补充粉笔的学生(java)
1894.找到需要补充粉笔的学生题目思路代码LeetCode笔记汇总题目一个班级里有 n 个学生,编号为 0 到 n - 1 。每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 n - 1 的学生,然后老师会重复这个过程,重新从编号为 0 的学生开始回答问题。给你一个长度为 n 且下标从 0 开始的整数数组 chalk 和一个整数 k 。一开始粉笔盒里总共有 k 支粉笔。当编号为 i 的学生回答问题时,他会消耗 chalk[i] 支粉笔。如果剩余粉笔数原创 2021-09-10 17:10:31 · 186 阅读 · 0 评论 -
746.使用最小花费爬楼梯(java)
746.使用最小花费爬楼梯题目思路代码LeetCode笔记汇总题目数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。思路动态规划状态转移方程为 dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2]原创 2021-09-09 10:26:32 · 200 阅读 · 0 评论 -
70.爬楼梯(java)
70.爬楼梯题目思路代码LeetCode笔记汇总题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。思路类似于斐波那契数列。由题意可知上第n阶之前的情况有n-1和n-2两种,因此动态规划的公式dp[n] = dp[n-1] + dp[n-2]初始化dp[0]、dp[1]为1代码class Solution { public int climbStairs(int n) {原创 2021-09-09 10:02:00 · 217 阅读 · 0 评论 -
509.斐波那契数(java)
509.斐波那契数题目思路代码LeetCode笔记汇总题目斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1思路n为0时返回0,n为1时返回1。当n大于1时,返回fib(n-1)+fib(n-2)代码class Solution { public int fib(int n) {原创 2021-09-09 09:37:08 · 142 阅读 · 0 评论 -
1137.第N个泰波那契数(java)
1137.第N个泰波那契数题目思路代码LeetCode笔记汇总题目泰波那契序列 Tn 定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数 n,请返回第 n 个泰波那契数 Tn 的值。思路特殊情况n为0时返回0,为1或2时返回1。当n大于3时,Tn为前三项和,因此我们可以用三个数来存储这三项的值,并且不断向后延长到n。代码class Solution { public int tri原创 2021-09-09 09:33:16 · 182 阅读 · 0 评论 -
11.盛水最多的容器(java)
11.盛水最多的容器题目思路代码LeetCode笔记汇总题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。思路盛水量即面积。用长方形的面积公式l*h计算即可。本题中先定义左右两个指针,计算两个指针所围成区域的面积,其中底l=right-left,高为两者高度中的较小者。原创 2021-09-07 11:13:02 · 325 阅读 · 0 评论 -
1221.分割平衡字符串(java)
1221.分割平衡字符串题目思路代码LeetCode笔记汇总题目在一个 平衡字符串 中,‘L’ 和 ‘R’ 字符的数量是相同的。给你一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。注意:分割得到的每个字符串都必须是平衡字符串。返回可以通过分割得到的平衡字符串的 最大数量 。思路代码...原创 2021-09-07 10:36:09 · 215 阅读 · 0 评论 -
力扣704.二分查找(java)
704.二分查找题目思路代码LeetCode笔记汇总题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。思路定义左右两个指针,左指针开始时指向0,右指针指向末尾,即nums.length-1。再计算一个中间指针mid,它的值即左右指针的中点。简单的计算方法为(left+right)/2 ,但是有可能左右指针相加会超过int类型的最大值,因此采用left + (right原创 2021-09-06 19:41:29 · 199 阅读 · 0 评论 -
力扣23.合并k个升序链表(java)
力扣23.合并k个升序链表题目思路代码LeetCode笔记汇总题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。思路先考虑特殊情况,当传入的lists中没有链表,即lists.length()==0 时,直接返回null当非空时,用容量为K的优先队列存储每个链表中的头节点,然后将队列中的最小元素出列,加入到结果链表中,再将出列链表的下一个元素加入到队列之中,即pq.add(list)最后返回结果链表,这里需要使用到虚拟头节点dummy原创 2021-09-05 15:54:04 · 276 阅读 · 0 评论 -
力扣6.Z字形变换(java)
力扣6.Z字形变换题目思路代码LeetCode笔记汇总题目思路先考虑特殊情况:当行数为1时,只有一行,即直接输出s即可当行数大于1时,由于涉及到了较多的字符串拼接,所以使用StringBuilder来处理主要的思路为按行读取字符,则一共需要读取numRows行。观察图像我们可以发现图像结构的规律为2*numRows-2为一组。我们以第i行(i从0开始)为例分析:首先每一组的第i个如果存在则一定就是第i行的字符。 当i不为第0行或第numRows行时,则还需添加位于z的斜边的字符代码c原创 2021-05-20 16:43:53 · 214 阅读 · 0 评论 -
力扣5.最长回文子串(java)
力扣5.最长回文子串题目思路代码LeetCode笔记汇总题目给你一个字符串 s,找到 s 中最长的回文子串。思路先考虑特殊情况:s为空或者s的长度小于1,此时的s必定不为回文串,直接返回一个空串""正常情况下,使用中心扩展算法如果一个子串是回文串,根据回文串的定义,将其左右两边各去掉一个字母之后仍然为回文串因此我们可以在已知的回文串两边各再扩展一个字符,如果相等,则仍未回文串代码class Solution { public String longestPalindrome(S原创 2021-05-20 15:53:59 · 225 阅读 · 0 评论 -
力扣292.Nim游戏(java)
力扣292.Nim游戏题目思路代码LeetCode笔记汇总题目思路拿石子问题的思路就是保证每次自己拿完之后,还剩下的个数是每次能拿去的最大个数+1本题中只要保证输入的不能被4整除即可代码class Solution { public boolean canWinNim(int n) { return (n % 4 != 0); }}...原创 2021-04-13 17:30:33 · 179 阅读 · 0 评论 -
力扣136.只出现一次的数字(java)
力扣136.只出现一次的数字题目思路代码题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4思路把出现过的元素当成key,元素出现的次数当成value存到map中,如果遍历到某一个元素num,查看map中是否存在元素(target - num),如果存在,那么可以组成一个原创 2021-01-21 09:51:05 · 260 阅读 · 0 评论 -
力扣153.寻找旋转排序数组中的最小值(java)
力扣153.寻找旋转排序数组中的最小值题目思路代码LeetCode笔记汇总题目思路直接遍历数组,输出最小值即可先定义一个ans,初始值为Integer.MAX_VALUE,然后在数组中寻找小于ans的值并替换遍历完之后返回ans因为原数组时升序排列的,故数组中左边的元素一定比右边的元素小。因此可以在数组中定义一个指针,如果这个指针左边的值小于右边的值,就返回右边的值。如果遍历完之后还没有return,则返回第一个元素代码class Solution { public in原创 2021-04-08 19:07:27 · 188 阅读 · 0 评论 -
力扣96.不同的二叉搜索树(java)
力扣96.不同的二叉搜索树题目思路代码LeetCode笔记汇总题目思路代码原创 2021-04-05 18:44:42 · 289 阅读 · 0 评论 -
力扣94.二叉树的中序遍历(java)
力扣94.二叉树的中序遍历题目思路代码LeetCode笔记汇总题目给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100原创 2021-04-04 17:21:34 · 439 阅读 · 1 评论 -
力扣86.分隔链表(java)
力扣86.分隔链表题目思路代码LeetCode笔记汇总题目给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例 1:输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]示例 2:输入:head = [2,1], x = 2输出:[1,2]思路本题没有限制不能使用额外的存储空间,因此我们可以定义两个链表left和ri原创 2021-04-02 18:36:34 · 236 阅读 · 0 评论 -
力扣206.反转链表(java)
力扣206.反转链表题目思路代码LeetCode笔记汇总题目思路双指针迭代迭代的思想是从左边开始两两交换链表中的节点。交换两个节点,使用一个长度为3的滑动窗口。窗口中的元素分别为pre,cur,temp。实际交换的是前两个节点,第三个temp节点主要用于存储,避免在改变cur.next后访问不到原链表中cur后面的元素。最开始时让pre指向null,从而达到将第一个节点的next置空的目的,否则将始终指向原链表的第二个元素。每次交换之后让三个指针后移一位即可,直至cur指针为空。递归代码原创 2021-04-01 15:45:33 · 269 阅读 · 1 评论 -
力扣27.移除元素(java)
力扣27.移除元素题目思路代码LeetCode笔记汇总题目示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。示例 2:输入:nums = [0,1,2,2,3,0,4,2], val = 2输出:5原创 2021-03-31 15:41:23 · 266 阅读 · 0 评论 -
力扣7.整数反转(java)
力扣7.整数反转题目思路代码LeetCode笔记汇总题目给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-231 ^ <=原创 2021-03-30 16:12:00 · 337 阅读 · 1 评论 -
力扣4.寻找两个正序数组的中位数(java)
力扣4.寻找两个正序数组的中位数题目思路代码LeetCode笔记汇总题目给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3)原创 2021-03-30 15:42:13 · 1217 阅读 · 0 评论 -
力扣104.二叉树的最大深度(java)
力扣104.二叉树的最大深度题目思路代码LeetCode笔记汇总题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。思路递归确定单层递归的逻辑:先求它的左子树的深度,再求的右子树的深度,最后取左右深度最大的数值,较大值+1即为当前节点所处的深度。终止条件为节点为空,返回0。代码class Solution {原创 2021-03-26 20:30:48 · 304 阅读 · 1 评论 -
力扣61.旋转链表(java)
力扣61.旋转链表题目思路代码LeetCode笔记汇总题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NUL原创 2021-03-26 20:09:27 · 304 阅读 · 0 评论 -
力扣19.删除链表的倒数第 N 个结点(java)
力扣19.删除链表的倒数第 N 个结点题目思路代码LeetCode笔记汇总题目给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <=原创 2021-03-25 20:06:46 · 255 阅读 · 0 评论 -
力扣24.两两交换链表中的节点(java)
力扣24.两两交换链表中的节点题目思路代码LeetCode笔记汇总题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100思路先生成一个哨兵节原创 2021-03-25 11:05:06 · 303 阅读 · 0 评论 -
力扣18.四数之和(java)
力扣18.四数之和题目思路代码LeetCode笔记汇总题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例 1:输入:nums = [1,0,-1,0,-2,2], target = 0输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]示例 2:输入:原创 2021-03-20 20:44:20 · 984 阅读 · 0 评论 -
力扣16.最接近的三数之和(java)
力扣16.最接近的三数之和题目思路代码LeetCode笔记汇总题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3 &l原创 2021-03-19 21:28:42 · 364 阅读 · 0 评论 -
力扣15.三数之和(java)
力扣15.三数之和题目思路代码LeetCode笔记汇总题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <=原创 2021-03-18 21:53:34 · 252 阅读 · 0 评论 -
力扣82.删除排序链表中的重复元素2(java)
力扣82.删除排序链表中的重复元素2题目思路代码LeetCode笔记汇总题目给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3思路先考虑特殊情况:删除头结点,故先创建一个哨兵节点dummy,使得dummy.next指向head再定义一个原创 2021-03-15 20:44:46 · 290 阅读 · 0 评论 -
力扣83.删除排序链表中的重复元素(java)
力扣83.删除排序链表中的重复元素题目思路代码LeetCode笔记汇总题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3思路由于题目所给的链表是已经排好序的,所以只需要比较每一个节点和它的前一个节点是否相同就可以判断是否需要删除该节点。代码class Solution { public List原创 2021-03-15 19:43:48 · 264 阅读 · 0 评论 -
力扣21.合并两个个有序链表(java)
力扣21.合并两个个有序链表题目思路代码LeetCode笔记汇总题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 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 <=原创 2021-03-04 21:51:11 · 334 阅读 · 1 评论 -
力扣23.合并K个升序链表(java)
力扣23.合并K个升序链表题目思路代码题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:原创 2021-03-04 21:35:16 · 389 阅读 · 2 评论 -
力扣237.删除链表中的节点(java)
删除中间节点题目思路代码题目实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f思路本题的最大难度在于理解题目的意思。题目中传入的是要删除的节点,而不是常见的头节点,因此不能用常见的"目标节点的上一个节点指向目标节点的下一个节点"的方式删除。本题中我们假设有 A-B-C-D四原创 2021-02-01 15:31:53 · 197 阅读 · 0 评论 -
力扣2.两数相加(java)
力扣2.两数相加题目思路代码题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9原创 2021-01-24 21:32:41 · 438 阅读 · 0 评论 -
力扣3. 无重复字符的最长子串(java)
力扣3. 无重复字符的最长子串题目思路代码题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须原创 2021-01-24 21:02:54 · 411 阅读 · 0 评论 -
LeetCode笔记(java)
LeetCode笔记(java)哈希表哈希表1.两数之和原创 2021-01-20 18:37:36 · 440 阅读 · 0 评论 -
CSP201909-1 JAVA解法
CSP201909-1/**3 373 -8 -6 -476 -5 -10 -880 -6 -15 0 */import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(),m=sc.nextInt(),index=0; int [] nums=new int[n]原创 2020-12-01 18:53:36 · 141 阅读 · 0 评论