美文网首页
LeetCode 15.三数之和

LeetCode 15.三数之和

作者: 风卷晨沙 | 来源:发表于2019-08-06 17:27 被阅读0次

    1、题目

    三数之和 - 力扣(LeetCode) https://leetcode-cn.com/problems/3sum/submissions/

    2、题解

    这个题目就是先将数组排序,前小后大;求出三个数之和为0的集合;排序之后遍历,在确定第一个数之后,for循环中建立第二个循环,通过指定j、k为数组下标的方法,对整个数组进行筛选,以此来得到满足条件的第二三个数。

    3、代码

    class Solution {
            public List<List<Integer>> threeSum(int[] nums) {
                //结果集
                List<List<Integer>> result = new ArrayList<>();
                //目标值
                int target = 0;
                //排序
                Arrays.sort(nums);
                // 异常
                if (nums.length < 3){
                    return result;
                }
                //遍历1
                for (int i = 0; i < nums.length; i++) {
                    if(nums[i]>0){
                        continue;
                    }
                    //越过相同的
                    if (i > 0 && nums[i] == nums[i - 1]){
                        continue;   // skip duplicates
                    }
                    //第二和第三的下标,J向后面移动,K向前面移动;
                    int j = i + 1;
                    int k = nums.length - 1;
                    //相当于forj=i+1;
                    while (j < k) {
                        if (nums[i] + nums[j] + nums[k] < target) {
                            j++;
                            //越过相同的
                            while (j < k && nums[j] == nums[j - 1]){
                                j++; // skip duplicates
                            }
                        } else if (nums[i] + nums[j] + nums[k] > target) {
                            k--;
                            while (j < k && nums[k] == nums[k + 1]){
                                k--; // skip duplicates
                            }
                        } else {
                            result.add(Arrays.asList(nums[i], nums[j], nums[k]));
                            j++;
                            k--;
                            while (j < k && nums[j] == nums[j - 1]){
                                j++; // skip duplicates
                            }
                            while (j < k && nums[k] == nums[k + 1]){
                                k--; // skip duplicates
                            }
                        }
                    }
                }
                return result;
            }
        }
    

    4、执行结果

    image.png

    相关文章

      网友评论

          本文标题:LeetCode 15.三数之和

          本文链接:https://www.haomeiwen.com/subject/abuwdctx.html