• [转载]力扣 三数之和 双指针


    题目链接

    代码

        class Solution {
            public List<List<Integer>> threeSum(int[] nums) {
                int n = nums.length;
                Arrays.sort(nums);
                List<List<Integer>> ans = new ArrayList<List<Integer>>();
                // 枚举 a
                for (int first = 0; first < n; ++first) {
                    // 需要和上一次枚举的数不相同
                    if (first > 0 && nums[first] == nums[first - 1]) {
                        continue;
                    }
                    // c 对应的指针初始指向数组的最右端
                    int third = n - 1;
                    int target = -nums[first];
                    // 枚举 b
                    for (int second = first + 1; second < n; ++second) {
                        // 需要和上一次枚举的数不相同
                        if (second > first + 1 && nums[second] == nums[second - 1]) {
                            continue;
                        }
                        // 需要保证 b 的指针在 c 的指针的左侧
                        while (second < third && nums[second] + nums[third] > target) {
                            --third;
                        }
                        // 如果指针重合,随着 b 后续的增加
                        // 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环
                        if (second == third) {
                            break;
                        }
                        if (nums[second] + nums[third] == target) {
                            List<Integer> list = new ArrayList<Integer>();
                            list.add(nums[first]);
                            list.add(nums[second]);
                            list.add(nums[third]);
                            ans.add(list);
                        }
                    }
                }
                return ans;
            }
        }
    
        作者:LeetCode-Solution
        链接:https://leetcode-cn.com/problems/3sum/solution/san-shu-zhi-he-by-leetcode-solution/
        来源:力扣(LeetCode)
        著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
  • 相关阅读:
    索引查找Java实现
    经典算法之折半查找
    进制转换问题
    排序算法总结之希尔排序
    自己写的栈
    排序问题Java
    画柱状图Java
    一些值得看的性能优化的文章
    理解 BFC
    canvas
  • 原文地址:https://www.cnblogs.com/bears9/p/13836213.html
Copyright © 2020-2023  润新知