15.三数之和

简介: 15.三数之和

题目:给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组

     

class Solution{
    public List<List<Integer>>threeSum(int[]nums){
        int n=nums.length;
        Arrays.sort(nums);
        List<List<Integer>>ans=new ArrayList<List<Integer>>();
        //枚举a
        for(int first=0;first<n;++first){
            //需要和上一次枚举的树不相同
            if(first>0 && nums[first]==nums[first-1]){
                continue;                            
            }        
            //c对应的指针初始指向数组的最右端
            int third=n-1;
            int target=-nums[first];
            //枚举b
            for(int second=first+1;second<n;++second){
                //需要和上一次枚举的数不相同    
                if(second>first +1&& nums[second]==nums[second-1]){
                    continue;                
                }        
                //需要保证b的指针在c的指针的左侧
                while(second<third&&nums[second]+nums[third]>target){
                    --third;                
                }
                //如果指针重合,随着b后续的增加
                //就不会有满足a+b+c=0,并且b<c的c,可以退出循环
                if(second==third){
                    break;                
                }
                if(nums[second]+nums[third]==target){
                    List<Integer> list = new ArrayList<Integer>();
                    list.add(nums[first]);
                    list.add(nums[second]);
                    list.add(nums[third]);
                    ans.add(list);             
                }
            }
        }    
        return ans;
    }
}


相关文章
|
11月前
|
算法
【算法专题突破】双指针 - 三数之和(7)
【算法专题突破】双指针 - 三数之和(7)
38 0
|
1月前
|
算法
LeetCode第15题三数之和
该文章介绍了 LeetCode 第 15 题三数之和的解法,通过先对数组排序,使用双指针减少循环层数,依次取一个元素作为第一个元素,通过双指针法寻找符合条件的三元组,并进行去重处理,同时总结了 2 数之和可使用哈希表解决,超过 2 数之和可使用双指针减少循环次数。
LeetCode第15题三数之和
|
4月前
15. 三数之和
15. 三数之和
31 3
|
3月前
15.三数之和
15.三数之和
|
4月前
|
算法 大数据
二分查找和二分答案
二分查找和二分答案
43 1
|
4月前
|
Java C++ Python
leetcode-15:三数之和
leetcode-15:三数之和
32 0
|
4月前
|
算法 NoSQL 容器
二分查找 三分查找与二分答案
二分查找 三分查找与二分答案
|
4月前
|
算法 C++
(C++)三数之和--双指针法
(C++)三数之和--双指针法
34 0
|
算法 测试技术
leetcode:15.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
73 0
|
测试技术 索引
leetcode_15. 三数之和
题目链接: 15. 三数之和 据说华为的机试经常考这题,而且这道题也是扩展性极强的一道题,你可以看到18. 四数之和,或者人为修改的五数之和,六数之和,乃至n 数之和,也就是
leetcode_15. 三数之和