欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【LeetCode】15. 三数之和

程序员文章站 2022-07-15 11:16:42
...

【LeetCode】15. 三数之和

可以用三层循环的方法,O(n^3)

改进的三层循环:先进行排序,第二层和第三层循环采用两指针相遇问题。这样,复杂度为O(n^2)

【LeetCode】15. 三数之和

/**
 * @Auther: Mason
 * @Date: 2020/07/14/9:43
 * @Description:
 */
public class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        int len = nums.length;
        // 首先进行升序排列
        Arrays.sort(nums);
        List<List<Integer>> res = new LinkedList<>();
        int third;
        int sum;
        OUT:
        for (int i = 0; i < len - 2; i++) { // 第一层循环
            if (i >= 1 && nums[i] == nums[i - 1]) continue;
            third = len - 1;// 第三个遍历的初始指针位置。
            for (int j = i + 1; j < len - 1; j++) { // 第二层循环
                if (j > i + 1 && nums[j] == nums[j - 1]) continue;
                sum = nums[i] + nums[j];
                while (third > j && sum + nums[third] > 0) third--;
                if (third == j) continue OUT;
                if (sum + nums[third] == 0) {
                    LinkedList<Integer> tmp = new LinkedList<>();
                    tmp.add(nums[i]);
                    tmp.add(nums[j]);
                    tmp.add(nums[third]);
                    res.add(tmp);
                }
            }
        }
        return res;
    }
}

相关标签: 算法