数组
c葱c
这个作者很懒,什么都没留下…
展开
-
leetcode 350. 两个数组的交集 II
【代码】leetcode 350. 两个数组的交集 II。原创 2023-05-16 10:00:36 · 129 阅读 · 0 评论 -
leetcode 76. 最小覆盖子串 (滑动窗口 + 双指针
滑动窗口的总是思想就是,先加入元素,等到元素满足以后,在移动左边的指针,不断查看是否满足条件,如果不满足,就就继续向右边移动。在不断两个指针不断移动的过程中,保存好找到的最优解。总体的思路是用两个哈希表,一个保存的是所需要的,一个保存的是现在现有的,通过不断对比,决定是否添加或者删除。原创 2023-05-14 10:00:39 · 42 阅读 · 0 评论 -
leetcode 33. 搜索旋转排序数组 ( 二分法
当 target > nums[mid] 还是 < nums[mid], 都可能会在两边存在解,所以才要根据边界值来判断。2. 注意不管mid落在哪一个部分,数字都是有序的,所以可以。原创 2023-05-10 15:35:41 · 34 阅读 · 0 评论 -
leetcode 153. 寻找旋转排序数组中的最小值
如果中间值是 2, 比 3 小,说明这个中间值是属于右边的,就去左边寻找,因为数组是有序的,如果去继续往右边找的话,只会找到更大的数。,所以当移动完之后,发现中间值是属于左边的,那么就去右边找,因为右边的值还没经过移动。此时中间值如果为 5 , 比 3 大,就说明这个中间值是属于左边的,这时候就去右边,当中间的值大于等于左边的值,就表示是递增的。原创 2023-05-10 14:27:55 · 43 阅读 · 0 评论 -
152. 乘积最大子数组
在每遍历一次的情况下就保留最大值和最小值。原创 2023-05-08 16:11:38 · 31 阅读 · 0 评论 -
leetcode 238. 除自身以外数组的乘积
postfix 对应的下标 是包括本身的后缀积。prefix 对应的下标 是包括本身的前缀积。直接在需要返回的数组上进行操作。这里就不定义多定义两个数组。原创 2023-05-07 15:47:39 · 31 阅读 · 0 评论 -
leetcode 209 长度最小的子数组
例如在这里,j 就是不断向前走的探索小兵,知道 sum 的值 >= target 就开始 i 的移动,i就是用来缩小窗口的。让区间不断减小,等到不满足就退出。这里不用担心,退出前已经记录好上次满足条件的 res 了。先让一个边界一直移动,等到满足了一定的条件以后,就慢慢移动另一个边界。两个边界合起来就是一个窗口(区间。思路:我滑动窗口的启蒙。原创 2023-03-16 09:41:43 · 67 阅读 · 0 评论 -
leetcode 34 搜索插入位置
很简单,根据二分查找就好了。注意,如果没找到,最后left == right 所以返回谁都是一样的。原创 2023-03-15 09:55:08 · 41 阅读 · 0 评论 -
leetcode 904 水果成篮
r 一直往前走,知道水果的种类超过了 2 也就是,map的大小超过了 2 就进入循环。用哈希表 key 对应水果 value 对应 出现次数。r是循环内的指针,像探寻的小兵 (在循环中,不断删除水果篮里面的水果。滑动窗口 + 双指针 + 哈希表。定义两个指针,l,r。原创 2023-03-14 19:37:36 · 56 阅读 · 0 评论 -
leetcode 34 在排序数组中查找元素的第一个和最后一个位置
注意点:在定义LeftBoard 和RightBoard的时候,不能讲它们定义为 -1。因为当数组中只有一个元素时,LeftBoard会等于 -1 ,但由于数组中存在该元素,所以这里会出现矛盾,定义为-2,就不会出现这样的问题。找左边界的时候,需要靠该搜索区间的最右端来确定。找的是最左边的,所以移动right,让左边界 = right。找有边界的时候,需要靠该搜索区间的最左端来确定。找的是最右边的,所以移动left,让右边界 = left。思路:先找左边界,后找右边界。原创 2023-03-15 10:54:53 · 30 阅读 · 0 评论 -
leetcode 27 移除元素
定义两个指针,一个fast,一个slow。fast是探寻小兵,负责找可以作为新数组元素的值,slow作为新数组的下标。二者都从 0 开始,一开始的 slow 并没有把第一个数就存进去,所以从第一个下标开始,就可以存储数据,存完之后再++这个想法是在太巧妙了。原创 2023-03-15 10:22:19 · 30 阅读 · 0 评论 -
【leetcode】 59 螺旋矩阵
自用。原创 2023-03-14 20:08:45 · 61 阅读 · 1 评论 -
leetcode 59 螺旋矩阵II
这里就是处理每条边的时候,保证最后一个数不被处理。留着给下一条边处理。offset的值是会改变的。当然这里也需要注意,每一条边处理的起始点也会改变,所以需要两个变量 startx starty。其实这里比较有意思的是,每个小循环for,结束以后,i,j都会刚好到下一条边将要操作的点上。原因就是因为,for循环最后还会进行一次对变量的 ++ 或 -- 操作。我是二刷,忘记了处理 n 为单数的情况,其实就是直接赋值就好。二维的vector和一维的初始化,不同。不过需要注意的是对每一条边的处理需要一致。原创 2023-03-16 10:11:03 · 40 阅读 · 0 评论 -
leetcode 977 有序数组的平方
sort(v.begin(),v.end(),cmp) cmp 是排序方式,可以选择升序 或者 降序。cmp是需要自己编写的函数。2.用双指针,分别指向第一个和最后一个,将二者都平方,比较大小。大的就先插入到数组中,这个时间复杂度是 O(n + nlogn), 可以说是O(nlogn)的时间复杂度。1. 直接对每个元素都平方,然后用sort排序。时间复杂度为O(n)原创 2023-03-16 09:19:30 · 30 阅读 · 0 评论 -
leetcode 704 二分查找
当左闭右闭时,说明本次查询right可以被取到,那下次查询就不包括right。同时根据区间的规定,左闭右开,可以存在 left == right。当左闭右开时,说明本次查询right不能被取到,则下一此就要取到right。同时根据区间的规定,左闭右开,left!因为设定的查找区间不一样,所以代码的边界值也会不一样。二分查找按照查找区间的不同,划分为两种。原创 2023-03-15 09:52:55 · 26 阅读 · 0 评论