hot100:06三数之和

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

算法思想:

使用双指针的思想,首先需要先对数组进行排序,让数组满足单调性,这样在相加的时候更加方便更新条件;再遍历数组,遍历数组的目的就是确定一个数numsi,然后在剩下的数中找到两个数时其相加等于-numsi,这样三个数相加的结果就是0了

注意:

结果要求返回的三元组不能是重复的,所以每找到一组三元组的时候,更新left和right两个指针的时候也需要进行去重(就是多加一个条件,判断更新指针之后的数如果和更新之前的数一样的话就继续更新指针),同时去重的时候也要注意越界问题

java 复制代码
public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> ret = new ArrayList<>();
        //1.先对数组排序
        Arrays.sort(nums);
        //2.使用双指针解决
        //2.1先固定第一个数
        int n = nums.length;
        for(int i = 0;i < n;) {
            //对后面的数组利用双指针的思想
            int target = -nums[i];
            int left = i+1;
            int right = n-1;
            while(left < right) {
                int sum = nums[left] + nums[right];
                if(sum < target) {
                    left++;
                } else if(sum > target) {
                    right--;
                } else {
                    //此时的三元组是:nums[i] nums[left] nums[right]
                    ret.add(new ArrayList<Integer>(Arrays.asList(nums[i],nums[left],nums[right])));
                    left++;
                    right--;
                    //需要去重 去重的时候要防止数组下标越界
                    while(left < right && nums[left] == nums[left-1]) {
                        left++;
                    }
                    while(left < right && nums[right] == nums[right+1]) {
                        right--;
                    }
                }
            }
            //外面固定的数nums[i]也需要进行去重
            i++;
            while(i < n && nums[i] == nums[i-1]) {
                i++;
            }
        }
        return ret;
    }
相关推荐
sunshine22 girl31 分钟前
Java学习七 Java 项目实战2-注册业务
java·学习
奋发向前wcx1 小时前
CSP-J复赛模拟赛4 王晨旭补题 2026.10.5
算法
省钱兄--zs1 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang1 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl2 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat2 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
念何架构之路3 小时前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
泡茶喝茶写代码4 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
晒太羊的猫4 小时前
hot100动态规划刷题
算法·动态规划
\光辉岁月/4 小时前
7.javase-面向对象
java·开发语言