
双指针
个人回收
这个作者很懒,什么都没留下…
展开
-
力扣643. 子数组最大平均数 I
一个朴素的想法是:对每个起点,往后枚举 k 个数看看平均数是否大于等于 t,这样时间复杂度为 O(nk)。注意到 k 是固定的,我们可以对所有子数组长度为 k 的区间预处理一个前缀和,然后只需要 O(1) 的时间计算一个区间的平均值。这样预处理的时间是 O(n),判断是否存在满足条件的区间的时间是 O(n),总时间复杂度是 O(n)。如果我们能够 O(1) 判断是否存在平均数大于等于一个给定数 t 的 k 个连续的数列,那么我们就可以用二分答案得到最终的答案。原创 2023-04-05 22:46:20 · 107 阅读 · 0 评论 -
力扣611. 有效三角形的个数
【代码】力扣611. 有效三角形的个数。原创 2023-04-05 22:03:22 · 164 阅读 · 0 评论 -
力扣80.无重复的元素Ⅱ
具体的,我们从第三个数字开始遍历整个数组。如果快指针指向的数字和慢指针指向的数字相同,则快指针向前移一位;如果快指针指向的数字和慢指针指向的数字不同,则将快指针指向的数字复制到慢指针后面一个位置,并将快指针和慢指针均向前移一位。最后,慢指针指向的下标就是新数组的长度。由于要保留重复元素最多出现两次,我们可以设置一个快指针和一个慢指针来处理数组。快指针用于遍历整个数组,慢指针用于记录符合要求的数字的下标。时间复杂度:O(n),其中 n 是数组的长度。空间复杂度:O(1)。原创 2023-04-05 21:53:45 · 158 阅读 · 0 评论 -
力扣26. 删除有序数组中的重复项
解题思路: 由于数组是有序的,我们可以通过双指针的方式来解决。定义两个指针,一个慢指针 i 和一个快指针 j,初始值都为 0。当 nums[i] == nums[j] 时,快指针 j 后移一位;当 nums[i]!= nums[j] 时,将 nums[j] 赋值给 nums[i+1],i 后移一位,j 后移一位。最后返回 i+1 的值即可。时间复杂度:O(n) 空间复杂度:O(1)原创 2023-04-05 21:25:40 · 57 阅读 · 0 评论