leetcode 15.三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出全部知足条件且不重复的三元组。

注意:答案中不能够包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

知足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

来源:力扣(LeetCode)
连接:https://leetcode-cn.com/problems/3sum
著做权归领扣网络全部。商业转载请联系官方受权,非商业转载请注明出处。














import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Solution {
    public static List<List<Integer>> threeSum(int[] nums){
        List<List<Integer>> ans=new ArrayList<>();//List嵌套申明
        int len=nums.length;
        if(len<3||nums==null) return ans;
        Arrays.sort(nums);
        for(int i=0;i<len;i++){
            if(nums[i]>0) break;
            if(i>0 && nums[i]==nums[i-1]){
                continue;//当i>0时才能知足i-1
            }
            int L=i+1;
            int R=len-1;
            while(R>L){
                int sum=nums[i]+nums[L]+nums[R];
                if(sum==0){
                    ans.add(Arrays.asList(nums[i],nums[L],nums[R]));
                    while(L<R && nums[L]==nums[L+1]) L++;//
                    while(L<R && nums[R]==nums[R-1]) R--;
                    L++;
                    R--;
                }
                else if(sum<0) L++;
                else if(sum>0) R--;
            }
        }
        return  ans;
}
}
相关文章
相关标签/搜索