美文网首页
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