![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode数组系列
leetcode数组系列
谜底666
我迷恋的时光自天空倾倒
展开
-
287 寻找重复数-类似于环形链表II
我们先设置慢指针 slow 和快指针 fast ,慢指针每次走一步,快指针每次走两步,根据「Floyd 判圈算法」两个指针在有环的情况下一定会相遇,此时我们再将 slow 放置起点 0,两个指针每次同时移动一步,相遇的点就是答案。给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。以数组 [1,3,4,2,2] 为例,我们将数组下标 n 和数 nums[n] 建立一个映射关系 f(n)注意是环的入口而不是第一次的相遇点。原创 2024-06-23 18:18:30 · 342 阅读 · 0 评论 -
31 下一个排列
整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1]。而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。类似地,arr = [2,3,1] 的下一个排列是 [3,1,2]。例如,arr = [1,2,3] 的下一个排列是 [1,3,2]。,这样才满足 “下一个排列” 的定义。输出:[1,3,2]原创 2024-06-23 15:32:53 · 242 阅读 · 0 评论 -
75 颜色分类
上面的代码主要涉及的地方其实就是等于2的时候,直接交换了并没有i++,其实是这样:最开始zero指向的元素可能并不是0,two指向的元素也并不是2,比如首次和2交换后,交换过去的元素可能012都有可能,那么如果直接i++的话就出错了;这道题,主要的思路是双指针,但是和之前的双指针意思不一样,这次因为数组中有三种元素,用zero指针和two指针分别代表0和2,然后剩下的中间的就是1.输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]原创 2024-06-23 14:50:35 · 127 阅读 · 0 评论 -
118 杨辉三角
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。输入: numRows = 5。原创 2024-06-20 22:20:29 · 296 阅读 · 0 评论 -
leetcode189 轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。输入: nums = [1,2,3,4,5,6,7], k = 3。主要的思路就是先整体反转,再反转前半部分,在反转后半部分。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]输出: [5,6,7,1,2,3,4]原创 2024-06-19 23:56:48 · 274 阅读 · 0 评论 -
leetcode498 对角线遍历
本题目主要考察的就是模拟法,首先可以计算得出,对角线的个数为m+n-1,在此基础上对于对角线进行遍历(从0开始),则第偶数条为从左下到右上,第奇数条为从右上到左下,根据奇数偶数来确定走什么遍历逻辑。给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。输入:mat = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,4,7,5,3,6,8,9]原创 2024-06-18 23:20:30 · 267 阅读 · 0 评论 -
leetcode56 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输出:[[1,6],[8,10],[15,18]]原创 2024-06-18 09:01:02 · 335 阅读 · 0 评论 -
leetcode73 矩阵置零
这道题题目上要求用原地算法,先说开辟额外辅助空间的方法吧,原理上就是对于行和列开辟两个布尔型数组,先遍历一遍矩阵,将为0的位置(行和列的下标)置为0,完事后再遍历一遍矩阵,把对应位置的值置为0即可。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]另外还有不适用额外空间,只需要定义变量的写法,但感觉有点复杂了,先不写了。输出:[[1,0,1],[0,0,0],[1,0,1]]原创 2024-06-14 08:24:33 · 328 阅读 · 0 评论 -
leetcode34 在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。首先递增有序数组,要想到二分法,这道题可以用左闭右开的方法来求出最开始的位置;输入:nums = [5,7,7,8,8,10], target = 8。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。如果数组中不存在目标值 target,返回 [-1, -1]。原创 2024-04-03 09:21:17 · 183 阅读 · 0 评论 -
leetcode 303 前缀和 区域和检索
这种题目其实也是可以自己想出来的,他要求数组中间某个范围的和,那大概率就是用类似于右边界的和减去左边界的和, 就可以求得中间环节的和;int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + nums[left + 1] + …计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left原创 2024-03-18 09:15:11 · 166 阅读 · 0 评论 -
leetcode2171 拿出最少数目的魔法豆
请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少还有一颗 魔法豆的袋子)魔法豆的数目 相等。一旦把魔法豆从袋子中取出,你不能再将它放到任何袋子中。这道题目题意上还是不太好理解的,最后要的结果是数组中的每个数据,要么是0,不为0的都应该相等。最后要求的是取出最少的豆子数目,转化一下求剩余最多的豆子。给定一个 正整数 数组 beans ,其中每个整数表示一个袋子里装的魔法豆的数目。总共拿出了 1 + 2 + 1 = 4 个魔法豆,剩下非空袋子中魔法豆的数目相等。原创 2024-01-23 09:03:22 · 423 阅读 · 0 评论 -
leetcode2744 最大字符串配对数目
给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。输入:words = [“cd”,“ac”,“dc”,“ca”,“zz”]字符串 words[i] 等于 words[j] 的反转字符串。请你返回数组 words 中的 最大 匹配数目。注意,每个字符串最多匹配一次。原创 2024-01-23 08:15:30 · 503 阅读 · 0 评论 -
相向双指针 leetcode 15 三数之和 + 167两数之和II + 16最接近的三数之和 + 18四数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。3.如果第一个数大于0,则再加上后面的两个(排序了),必然不会等于0;2.然后对数组进行排序,排序后勉励数组,对里面的数据再进行处理;不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]原创 2022-10-05 15:14:53 · 379 阅读 · 0 评论 -
相向双指针 leetcode42 接雨水
如果不想开辟两个新组数,那么就使用两个单纯的指针,分别从左右开始遍历,那么此刻我们知道,比如左右都遍历了两个位置,那么中间位置的容量我们是不知道的,但是如果前缀最大值比后缀最大值小,那么左边木桶的容量就是前缀最大值的容量,算完后向右扩展;解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]原创 2023-10-08 12:13:22 · 197 阅读 · 1 评论 -
相向双指针 leetcode11 盛水最多的容器
主要还是得理解了题意才行,要求的是最大容器,其实也就是最大的面积,那求面积的话,其实就是宽乘以高,宽就是双指针下标之间的距离;高就是双指针中高度较小的那个,理解了这个后,这道题目就不难了。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。这里可以注意下,如果用的是go 1.21后面的版本,就不需要自己定义max和min了,只用用就行。输入:[1,8,6,2,5,4,8,3,7]原创 2023-09-22 16:12:37 · 259 阅读 · 0 评论 -
leetcode66 加一
主要的思路是数组从后向前遍历,要判断遍历的过程中,从哪一位开始不等于9,这样的话这一位就+1,同时再遍历从这一位开始,到最后的每一位都赋值为0,最后返回即可。加入没有走到返回的代码,那么就可能是所以位都是9,对于golang来说需要再新开一个数组,大小为之前的n+1,然后第一位是1,后面的都是0即可。给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。输入:digits = [1,2,3]输出:[1,2,4]原创 2023-07-03 23:18:13 · 118 阅读 · 0 评论 -
leetcode88 合并两个有序数组
这道题看到后,先想到的是链表中的合并两个有序链表,两道题还不太一样,这道需要将结果还是放到nums1中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n。给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。原创 2023-05-10 08:14:04 · 141 阅读 · 1 评论 -
leetcode2006 差的绝对值为K的数对数目 easy
题目:给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。示例:输入:nums = [1,2,2,1], k = 1输出:4解释:差的绝对值为 1 的数对为:- [1,2,2,1]- [1,2,2,1]- [1,2,2,1]- [1,2,2,1]解析:哈希表+一次遍历即可,先定义一个map,遍历数组,key就是数组中的每个值,分别计算+k和-k在不在数组中,在的话就在原创 2022-02-09 23:02:08 · 354 阅读 · 0 评论 -
leetcode1725 可以形成最大正方形的矩形数目 easy
题目:给你一个数组 rectangles ,其中 rectangles[i] = [li, wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。如果存在 k 同时满足 k <= li 和 k <= wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [4,6] 可以切成边长最大为 4 的正方形。设 maxLen 为可以从矩形数组 rectangles 切分得到的 最大正方形 的边长。请你统计有多少个矩形能够切出边长为 maxLen 的正方形,并返回矩形 数原创 2022-02-04 11:18:00 · 617 阅读 · 0 评论 -
leetcode1748 唯一元素的和 easy
终于碰到一道会做的题,不容易。。题目:给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。请你返回 nums 中唯一元素的 和 。示例:输入:nums = [1,2,3,2]输出:4解释:唯一元素为 [1,3] ,和为 4 。解析:定义一个哈希表,go语言中应该需要是用一个map类型,key是int类型,value也是int类型;key是数组中的每个数字,value是次数func sumOfUnique(nums []int) (ans i原创 2022-02-06 22:55:06 · 408 阅读 · 0 评论 -
leetcode26 删除有序数组中的重复项 + 80 删除有序数组中的重复项II
题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。解析:首先审题,数组本身就是有序的了;方法:双指针,快慢指针的值相原创 2022-02-03 11:31:06 · 384 阅读 · 0 评论 -
leetcode59螺旋矩阵II + 54螺旋矩阵 + 48旋转图像
这道题属于数组中的模拟法,就是一直来循环处理,但是要处理好边界条件,比如矩阵的每一条边,要用左闭右开的方式去处理,这样的每条边的处理流程是一样的。给你一个正整数 n ,生成一个包含 1 到 n*n 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。找不到图了,记得之前题目示例中是有个图的,咋没了呢,大概意思就是比如n=3,就会生成一个3*3的矩阵,顺序是从外到内顺时针螺旋排的。输出:[[1,2,3],[8,9,4],[7,6,5]]原创 2022-09-04 15:11:54 · 193 阅读 · 0 评论 -
leetcode209 长度最小的子数组 middle
题目:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。解析:继之前的解决数组的问题有二分查找、双指针后,又迎来了滑动窗口法。滑动窗原创 2022-04-11 09:46:15 · 400 阅读 · 0 评论 -
leetcode977 有序数组的平方 easy
题目:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]解析:这道题还是双指针,首先要新开一个数组来存结果,其次对于原数组,因为原来是排好序的,平方后只有可能两边的是大值,所以两个指针分别在原数组的开始和结尾来进行比较,把平方后值较大的原创 2022-04-10 15:47:12 · 567 阅读 · 0 评论 -
leetcode27 移除元素 easy
题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。解析:这道题主要是不能开新的空间,所以操作只能在原数组上,可以采用双指针法;且还是有那个老生长谈的是 < 还是 <= 的问题,拓展自:leetcode704 二分查找 easy_谜底666的博客-CSDN博客按..原创 2022-04-10 11:53:17 · 435 阅读 · 0 评论