
双指针
文章平均质量分 57
Lvgalaxy
这个作者很懒,什么都没留下…
展开
-
力扣三数之和、四数之和(数组+双指针+排序)
三数之和 算法流程: 1、特判,对于数组长度 nn,如果数组为 nullnull 或者数组长度小于 33,返回 [][]。 2、对数组进行排序。 3、遍历排序后数组: 若 nums[i]>0nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于 00,直接返回结果。 对于重复元素:跳过,避免出现重复解 令左指针 L=i+1L=i+1,右指针 R=n-1R=n−1,当 L<RL<R 时,执行循环: 当 nums[i]+nums[L]+nums[R]==0nums[i]转载 2021-08-16 23:03:02 · 202 阅读 · 0 评论 -
哈希表,双指针
力扣:两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 public int[] twoSum(int[] nums, int target) { int len=nums.length; Map<Integer, Integer> ha.原创 2021-08-15 17:00:27 · 262 阅读 · 0 评论 -
滑动窗口(LeetCode第3题:无重复字符的最长字串)
什么是滑动窗口? 其实就是一个队列,比如 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,要移动这个队列! 如何移动?只要把队列的左边的元素移出就行了,直到满足题目要求! 一直维持这样的队列,找出队列出现最长的长度时候,求出解! 题目 无重复字符的最长子串 过程 维护一张hash表,key是元素,value是元素index(元素)+1, 从头开始遍历数组end++ 若该元素没有重复,则map.put(key, end+1);原创 2021-05-25 12:51:07 · 160 阅读 · 0 评论 -
归并两个有序数组(双指针)
因为这两个数组已经排好序,我们可以把两个指针分别放在两个数组的末尾,即 nums1 的m − 1 位和 nums2 的 n − 1 位。每次将较大的那个数字复制到 nums1 的后边,然后向前移动一位。因为我们也要定位 nums1 的末尾,所以我们还需要第三个指针,以便复制。 在以下的代码里,我们直接利用 m 和 n 当作两个数组的指针,再额原创 2021-08-18 18:19:51 · 267 阅读 · 0 评论