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;
    }
}
全部评论

相关推荐

讲原则的小黄鸭不愿吃...:有时候面试眼缘确实很重要,当然,飞驰人生2中张弛说的很对:我努力了无数次,但是我知道机会只会出现在其中一两次。你把每一次笔试面试都全力以赴,总有你运气发挥到位的时候
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务