三数之和 -双指针解法

该博客详细介绍了如何使用双指针法解决寻找数组中三数之和的问题。首先通过三重循环的常规解法给出基础思路,然后重点讲解双指针解法,包括简化问题为两数之和,对数组排序,以及利用左右指针在中间遍历找到所有满足条件的序列。博客还总结了双指针问题的三种常见思想:左右指针、快慢指针和后序指针,并给出了具体实现代码。
摘要由CSDN通过智能技术生成

三数之和 --双指针解法

题目:

在这里插入图片描述

一般解法

三重循坏,分别取三个数,查看和是否为0即可,是就加入集合,不是进入下次迭代。

双指针解法

思路:
  • 本题是解决集合内三数之和的问题,可以将问题简化为求两数之和的问题。只需要在第一次循环确定第一个数,二三次循环的数的和为总和减去第一个数即可。由于结果不唯一,且不能重复,我们可以先对数组进行排序,再用双指针操作数组得到所有和为目标值的序列。

  • 解决双指针问题三种常用思想:

    1. 左右指针:需要两个指针,一个指向开头,一个指向末尾,然后向中间遍历,直到满足条件或者两个指针相遇
    2. 快慢指针:需要两个指针,开始都指向开头,根据条件不同,快指针走得快,慢指针走的慢,直到满足条件或者快指针走到结尾
    3. 后序指针:常规指针操作是从前向后便利,对于合并和替换类型题,防止之前的数据被覆盖,双指针需从后向前便利
    4. 记忆口诀:左右指针中间夹,快慢指针走到头,后序指针往回走
    • 这里使用的是左右指针
  • 实现代码:

class Solution {
   
    public List<List<Integer>> threeSum(int[] nums) {
   
        qsort(nums, 0, nums.length-1);    //为了防止重复结果,故对初始数组进行了排序
        List<List<Integer>> ret = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        for(int i=0;i<nums.length-2;i++){
   
            if(nums[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值