leetcode刷题分享:15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

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

思路不难想,可以先排好序然后三指针移动找到和为0,这道题最有意思的地方在于它要求你把握好去重,nums[i], nums[j], nums[k]的去重。只要小心这一点这道题就不难解了。 附一份菜鸡代码。

class Solution {
public List<List<Integer>> threeSum(int[] nums) {
    if(nums.length==0) return new ArrayList<>();
    List<List<Integer>> res=new ArrayList<>();
    Arrays.sort(nums);
    for(int i=0;i<nums.length-2;i++){
        if(i>0&&nums[i]==nums[i-1]) {
            continue;
        }
        int l=i+1,r=nums.length-1;
        while(l<r){
            int sum=nums[i]+nums[l]+nums[r];
            if(sum==0){
                res.add(new ArrayList<>(List.of(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{
                r--;
            }
        }
    }
    return res;
}

}

#笔试#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务