Java | 3 sum 【三数之和】排序+三指针+去重

三数之和

http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711

import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        int len = nums.length;
        for (int a = 0; a < len; a++) {
            if (nums[a] > 0) {
                return res;
            }
            if (a > 0 && nums[a] == nums[a-1]) {
                continue;
            }
            int b = a + 1;
            int c = len - 1;
            while (b < c) {
                int sum = nums[a] + nums[b] + nums[c];
                if (sum == 0) {
                    ArrayList<Integer> list = new ArrayList<>();
                    list.add(nums[a]);
                    list.add(nums[b]);
                    list.add(nums[c]);
                    res.add(list);
                    while (b < c && nums[b+1] == nums[b]) {
                        b++;
                    }
                    while (b < c && nums[c] == nums[c-1]) {
                        c--;
                    }
                    b++;
                    c--;
                } else if (sum > 0) {
                    c--;
                } else {
                    b++;
                }
            }
        }
        return res;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务