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;
    }
}


相关文章
|
2月前
【LeetCode 16】15.三数之和(双指针法)
【LeetCode 16】15.三数之和(双指针法)
32 1
|
算法
【算法专题突破】双指针 - 三数之和(7)
【算法专题突破】双指针 - 三数之和(7)
51 0
|
2月前
【LeetCode 15】15.三数之和
【LeetCode 15】15.三数之和
39 0
|
4月前
|
算法
LeetCode第15题三数之和
该文章介绍了 LeetCode 第 15 题三数之和的解法,通过先对数组排序,使用双指针减少循环层数,依次取一个元素作为第一个元素,通过双指针法寻找符合条件的三元组,并进行去重处理,同时总结了 2 数之和可使用哈希表解决,超过 2 数之和可使用双指针减少循环次数。
LeetCode第15题三数之和
|
7月前
15. 三数之和
15. 三数之和
37 3
|
6月前
15.三数之和
15.三数之和
|
7月前
|
Java C++ Python
leetcode-15:三数之和
leetcode-15:三数之和
42 0
|
7月前
|
算法 C++
(C++)三数之和--双指针法
(C++)三数之和--双指针法
44 0
|
算法
【算法专题突破】双指针 - 四数之和(8)
【算法专题突破】双指针 - 四数之和(8)
34 0
|
算法 测试技术
leetcode:15.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
84 0