数组
数组
从零开始的数据猿
这个作者很懒,什么都没留下…
展开
-
LeetCode 383. 赎金信
题目给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。) 示例 1:输入:ransomNote = "a", magazine = "b"输出:false示例 2:输入:rans原创 2021-05-14 09:34:20 · 118 阅读 · 0 评论 -
LeetCode 76. 最小覆盖子串
题目给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"示例 2:输入:s = "a", t = "a"输出:"a" 提示:1 <= s.length, t.length <= 105s 和 t 由英文字母组原创 2021-05-10 08:25:01 · 141 阅读 · 0 评论 -
LeetCode 904. 水果成篮
题目在一排树中,第 i 棵树产生 tree[i] 型的水果。你可以从你选择的任何树开始,然后重复执行以下步骤:把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。移动到当前树右侧的下一棵树。如果右边没有树,就停下来。请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。你有两个篮子,每个篮子可以携带任何数量的水果,但你希望每个篮子只携带一种类型的水果。用这个程序你能收集的水果树的最大总量是多少?原创 2021-05-10 08:21:46 · 168 阅读 · 0 评论 -
LeetCode 977. 有序数组的平方
题目给你一个按 非递减顺序 排序的整数数组 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 <= 104-1原创 2021-05-09 08:26:17 · 101 阅读 · 0 评论 -
LeetCode 283. 移动零
题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。解题思路第一次遍历的时候,j指针记录非0的个数,只要是非0的统统都赋给nums[j]非0元素统计完了,剩下的都是0了所以第二次遍历把末尾的元素都赋为0即可代码class Solution { public void moveZeroes(int原创 2021-05-08 10:01:06 · 74 阅读 · 0 评论 -
LeetCode 844. 比较含退格的字符串
题目给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。 示例 1:输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = "ab##", T = "c#d#"输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = "a##c", T = "#a#c"输出:true解释:原创 2021-05-08 09:58:13 · 163 阅读 · 0 评论 -
LeetCode 80. 删除有序数组中的重复项 II
题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeD原创 2021-05-04 15:27:28 · 160 阅读 · 1 评论 -
LeetCode 27. 移除元素
题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对原创 2021-05-04 15:23:27 · 74 阅读 · 0 评论 -
LeetCode 26. 删除有序数组中的重复项
题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDu转载 2021-05-04 15:21:08 · 94 阅读 · 0 评论 -
LeetCode 367. 有效的完全平方数
题目给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如 sqrt 。 示例 1:输入:num = 16输出:true示例 2:输入:num = 14输出:false 提示:1 <= num <= 2^31 - 1解题思路二分法代码class Solution { public boolean isPerfectSquare(int nu原创 2021-05-04 07:36:58 · 141 阅读 · 0 评论 -
LeetCode 69. x 的平方根
题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。解题思路二分法, 最好手动模拟一遍代码class Solution { public int mySqrt(int x) {原创 2021-05-04 07:35:21 · 158 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入:原创 2021-05-03 20:54:44 · 71 阅读 · 0 评论 -
LeetCode 392. 判断子序列
题目给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?致谢:特别感谢 @pbrother 添加此问题并且创建所有测试用例。 示例 1:原创 2021-04-21 10:35:48 · 84 阅读 · 1 评论 -
LeetCode 647. 回文子串
题目给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1:输入:"abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:"aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa" 提示:输入的字符串长度不会超过 1000 。第一种解法:动态规划代码class Solution { p原创 2021-04-20 21:27:59 · 137 阅读 · 1 评论 -
LeetCode 59. 螺旋矩阵 II 做题小结
题目给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]解题思路与算法代码class Solution { public int[][] generateMatrix(int n) { int l = 0, r = n - 1, t = 0, b = n - 1; int[][] mat原创 2021-01-30 20:48:12 · 2279 阅读 · 4 评论 -
双指针 四数之和
题目LeetCode 18. 四数之和给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1,原创 2021-01-29 20:38:48 · 9281 阅读 · 1 评论 -
双指针 三数之和
题目LeetCode 15. 三数之和给你一个包含 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-01-29 20:23:25 · 15873 阅读 · 6 评论 -
数组 滑动窗口
题目LeetCode 209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。 进阶:如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。解题思路与算法滑动窗口法代原创 2021-01-28 20:43:03 · 431 阅读 · 6 评论 -
双指针法 移除数组元素
题目LeetCode 27. 移除元素解题思路与算法双指针法:代码class Solution { public int removeElement(int[] nums, int val) { int slowIndex = 0; for(int fastIndex = 0;fastIndex<nums.length;fastIndex++) { if(val!=nums[fastIndex]) { nums[slowIndex++]=nums[fastI原创 2021-01-28 20:13:58 · 7067 阅读 · 6 评论 -
LeetCode 35. 搜索插入位置
题目LeetCode 35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0解题思路与算法二分法,只要看到题里给出的数组是有序数组,都可以想原创 2021-01-28 19:56:11 · 7338 阅读 · 2 评论