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)
        著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/bears9/p/13836213.html
Copyright © 2011-2022 走看看