zoukankan      html  css  js  c++  java
  • [转载]力扣 三数之和 双指针

    题目链接

    代码

        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)
        著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
  • 相关阅读:
    HDU1316 fib+高精度
    HDU1868
    HDU2586 LCA
    HDU1113 字符串处理
    HDU1115 几何+多边形重心
    HDU1124
    HDU1110 几何
    HDU1103
    HDU2670 DP
    linux 下查看机器是cpu是几核的
  • 原文地址:https://www.cnblogs.com/bears9/p/13836213.html
Copyright © 2011-2022 走看看