左右端点指针
文章平均质量分 57
weixin_43842888
这个作者很懒,什么都没留下…
展开
-
【左右端点指针】LeetCode - 713. 乘积小于K的子数组
题目描述 题目链接 解法 分析 对于每个 right(i),我们需要找到最小的 left(j),满足 从 left 到 right 的数值乘积小于 k 。由于当 left 增加时,这个乘积是单调不增的,因此我们可以使用双指针的方法,单调地移动 left 算法 我们使用一重循环枚举 right,同时设置 left 的初始值为 0。在循环的每一步中,表示 right 向右移动了一位,将乘积乘以 nums[right]。当乘积大于等于 k 时我们需要向右移动 left,直到满足乘积小于 k 的条件。在每次移动时原创 2021-02-15 00:24:35 · 77 阅读 · 0 评论 -
【左右端点指针】LeetCode - 16. 最接近的三数之和
题目描述 题目链接 解法 思路已经在【左右端点指针】LeetCode - 15. 三数之和 中较为详细地解释过了,不同的是,本题已经假定了只有唯一答案,所以不需要去重;这次不是和 0 比较,而是比较 abs(target-sum) 和 abs(target-ans) 另外的两个小优化(其实15中也体现了) 当我们枚举到恰好等于 target 的 a+b+c 时,可以直接返回 target 作为答案,因为不会有再比这个更接近的值了。 当我们枚举 a,b,c 中任意元素并移动指针时,可以直接将其移动到下一个原创 2021-02-14 23:04:04 · 40 阅读 · 0 评论 -
【左右端点指针】LeetCode - 15. 三数之和
题目描述 题目链接 解法 首先我发现左右端点指针的前提一般是有序序列,所以一般跟排序一块,这类题是这样,二分查找也是这样 思路: 一个固定指针 k 遍历数组,两个动指针 i,j 分设在数组索引 (k,len(nums)) 两端,通过双指针交替向中间移动,记录对于每个固定指针 k 的所有满足题目要求 nums[k] + nums[i] + nums[j] == 0 的 i,j 组合 当 k > 0且nums[k] == nums[k - 1]时即跳过此元素。因为已经将 nums[k - 1] 的所有原创 2021-02-14 22:55:26 · 68 阅读 · 0 评论