
力扣笔记
做题笔记
龙含日月
这个作者很懒,什么都没留下…
展开
-
455. 分发饼干(Java贪心解决)
题目 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。 示例 1: 输入: g = [1,2,3], s = [1,1] 输出: 1 解原创 2022-02-25 12:39:14 · 600 阅读 · 0 评论 -
35. 搜索插入位置(Java二分法解决)
题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums = [1,3,5,6], target = 5 输出: 2 示例 2: 输入: nums = [1,3,5,6], target = 2 输出: 1 示例 3: 输入: nums = [1,3,5,6], target = 7 输出: 4 示例 4: 输入: nums = [1,3,5,6]原创 2022-02-24 12:42:00 · 364 阅读 · 0 评论 -
26. 删除有序数组中的重复项(Java双指针解决)
题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的原创 2022-02-23 19:25:25 · 192 阅读 · 0 评论 -
347. 前 K 个高频元素(Java小顶堆解决)
题目 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], k = 1 输出: [1] 提示: 1 <= nums.length <= 105 k 的取值范围是 [1, 数组中不相同的元素的个数] 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的 来源:力扣(LeetCode原创 2022-02-22 20:13:18 · 182 阅读 · 0 评论 -
239. 滑动窗口最大值(Java单调双端队列解决)
题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5原创 2022-02-20 18:20:33 · 206 阅读 · 0 评论 -
150. 逆波兰表达式求值(Java用栈解决)
题目 根据逆波兰表示法,求表达式的值。 有效的算符包括+、-、*、/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 注意两个整数之间的除法只保留整数部分。 可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为0的情况。 示例1: 输入:tokens=["2","1","+","3","*"] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2+1)*3)=9 示例2: 输入:tokens=["4"...原创 2022-02-18 12:38:28 · 113 阅读 · 0 评论 -
1047. 删除字符串中的所有相邻重复项(Java用栈解决)
题目 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例: 输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。原创 2022-02-17 11:50:19 · 609 阅读 · 0 评论 -
20. 有效的括号(Java用栈解决)
题目 给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例1: 输入:s="()" 输出:true 示例2: 输入:s="()[]{}" 输出:true 示例3: 输入:s="(]" 输出:false 示例4: 输入:s="([)]" 输出:false 示例5: 输入:s="{[]}"...原创 2022-02-15 12:04:03 · 675 阅读 · 0 评论 -
225. 用队列实现栈(Java用双队列解决)
题目 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop和empty)。 实现MyStack类: voidpush(intx)将元素x压入栈顶。 intpop()移除并返回栈顶元素。 inttop()返回栈顶元素。 booleanempty()如果栈是空的,返回true;否则,返回false。 注意: 你只能使用队列的基本操作——也就是pushtoback、peek/popfrom...原创 2022-02-14 17:14:43 · 179 阅读 · 0 评论 -
232. 用栈实现队列(Java双栈解决)
题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现MyQueue类: voidpush(intx)将元素x推到队列的末尾 intpop()从队列的开头移除并返回元素 intpeek()返回队列开头的元素 booleanempty()如果队列为空,返回true;否则,返回false 说明: 你只能使用标准的栈操作——也就是只有pushtotop,peek/popfrom...原创 2022-02-13 18:03:10 · 225 阅读 · 0 评论 -
459. 重复的子字符串(Java枚举法解决)
题目 给定一个非空的字符串s,检查是否可以通过由它的一个子串重复多次构成。 示例1: 输入:s="abab" 输出:true 解释:可由子串"ab"重复两次构成。 示例2: 输入:s="aba" 输出:false 示例3: 输入:s="abcabcabcabc" 输出:true 解释:可由子串"abc"重复四次构成。(或子串"abcabc"重复两次构成。) 提示: 1<=s.length<=...原创 2022-02-12 13:06:09 · 870 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串(Java数组解决)
题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例1: 输入:s="abcdefg",k=2 输出:"cdefgab" 示例2: 输入:s="lrloseumgh",k=6 输出:"umghlrlose" 限制: 1<=k<s.length<=10000 ...转载 2022-02-10 11:34:42 · 124 阅读 · 0 评论 -
151. 翻转字符串里的单词(Java用新字符数组解决)
题目 给你一个字符串s,逐个翻转字符串中的所有单词。 单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。 请你返回一个翻转s中单词顺序并用单个空格相连的字符串。 说明: 输入字符串s可以在前面、后面或者单词间包含多余的空格。 翻转后单词间应当仅用一个空格分隔。 翻转后的字符串中不应包含额外的空格。 示例1: 输入:s="theskyisblue" 输出:"blueisskythe" 示例2: 输入:s="...原创 2022-02-09 11:51:42 · 215 阅读 · 0 评论 -
剑指 Offer 05. 替换空格(Java)
题目 请实现一个函数,把字符串s中的每个空格替换成"%20"。 示例1: 输入:s="Wearehappy." 输出:"We%20are%20happy." 限制: 0<=s的长度<=10000 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 转换成字符数...原创 2022-02-08 16:48:24 · 129 阅读 · 0 评论 -
541. 反转字符串 II(Java用双指针)
题目 给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。 如果剩余字符少于k个,则将剩余字符全部反转。 如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符保持原样。 示例1: 输入:s="abcdefg",k=2 输出:"bacdfeg" 示例2: 输入:s="abcd",k=2 输出:"bacd" 提示: 1<=s.length<=...原创 2022-02-06 17:31:44 · 129 阅读 · 0 评论 -
344. 反转字符串(Java双指针)
题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。 示例1: 输入:s=["h","e","l","l","o"] 输出:["o","l","l","e","h"] 示例2: 输入:s=["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"] 提示: 1<=s.len...原创 2022-02-06 16:11:32 · 177 阅读 · 0 评论 -
18. 四数之和(Java排序和双指针)
题目 给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a],nums[b],nums[c],nums[d]](若两个四元组元素一一对应,则认为两个四元组重复): 0<=a,b,c,d<n a、b、c和d互不相同 nums[a]+nums[b]+nums[c]+nums[d]==target 你可以按任意顺序返回答案。 示例1: 输入:num...原创 2022-02-02 17:40:20 · 1586 阅读 · 0 评论 -
15. 三数之和(Java双指针解决)
题目 给你一个包含 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 <= nums.len原创 2022-01-30 22:46:27 · 161 阅读 · 0 评论 -
383. 赎金信(Java的哈希表)
题目 给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。 如果可以,返回true;否则返回false。 magazine中的每个字符只能在ransomNote中使用一次。 示例1: 输入:ransomNote="a",magazine="b" 输出:false 示例2: 输入:ransomNote="aa",magazine="ab" 输出:false 示...原创 2022-01-30 16:21:15 · 1447 阅读 · 0 评论 -
454. 四数相加 II(Java的哈希表解决)
题目 给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足: 0<=i,j,k,l<n nums1[i]+nums2[j]+nums3[k]+nums4[l]==0 示例1: 输入:nums1=[1,2],nums2=[-2,-1],nums3=[-1,2],nums4=[0,2] 输出:2 解释: 两个元组如下: 1.(0,...原创 2022-01-29 22:05:30 · 1116 阅读 · 0 评论 -
1. 两数之和(Java的HashMap来解决)
题目 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例1: 输入:nums=[2,7,11,15],target=9 输出:[0,1] 解释:因为nums[0]+nums[1]==9,返回[0,1]。 示例2: 输入:nums=[3,...原创 2022-01-28 18:39:04 · 266 阅读 · 0 评论 -
202. 快乐数(Java哈希集合解决)
题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。 示例 1: 输入:n = 19 输出:true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 +原创 2022-01-27 17:19:30 · 116 阅读 · 0 评论 -
349. 两个数组的交集(Java)利用哈希集合
题目 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection原创 2022-01-26 22:07:10 · 132 阅读 · 0 评论 -
1002.查找共用字符(Java)
题目 给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。 示例 1: 输入:words = ["bella","label","roller"] 输出:["e","l","l"] 示例 2: 输入:words = ["cool","lock","cook"] 输出:["c","o"] 提示: 1 <= words.length <= 100 1 <=原创 2022-01-24 22:21:47 · 629 阅读 · 0 评论 -
242.有效的字母异位词(Java)
题目 给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。 注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。 示例1: 输入:s="anagram",t="nagaram" 输出:true 示例2: 输入:s="rat",t="car" 输出:false 提示: 1<=s.length,t.length<=5*104 s和t仅包含小写字母 来...原创 2022-01-23 12:46:58 · 193 阅读 · 0 评论 -
59. 螺旋矩阵 II
题目 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2: 输入:n = 1 输出:[[1]] 提示: 1 <= n <= 20 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/spiral-matrix-ii 著作权归领扣网络所有。商业转载请联系原创 2022-01-21 20:49:04 · 109 阅读 · 0 评论 -
209. 长度最小的子数组(Java)
题目 209.长度最小的子数组 给定一个含有n个正整数的数组和一个正整数target。 找出该数组中满足其和≥target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。 示例1: 输入:target=7,nums=[2,3,1,2,4,3] 输出:2 解释:子数组[4,3]是该条件下的长度最小的子数组。 示例2: 输入:target=...原创 2022-01-20 09:00:00 · 248 阅读 · 0 评论 -
977. 有序数组的平方(Java)
题目 给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例1: 输入:nums=[-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为[16,1,0,9,100] 排序后,数组变为[0,1,9,16,100] 示例2: 输入:nums=[-7,-3,2,3,11] 输出:[4,9,9,49,121] 提示: 1<=nums.length&...原创 2022-01-19 09:00:00 · 335 阅读 · 0 评论 -
移除元素(快慢指针法)
题目 27.给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不...原创 2022-01-18 09:15:00 · 196 阅读 · 0 评论 -
二分法Java
题目 704.给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 解题思路 二分法的一般写法 代码 class Solution { public int search(int[] nums, int target) { if (target < nums[0] || target > nums[nums.length - 1]) {原创 2022-01-17 12:00:29 · 300 阅读 · 0 评论