题解 | #三数之和#

三数之和

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

import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        // 数组排序
        Arrays.sort(num);
        int len = num.length;
        // 固定第一位数,剩下的两位数使用双指针
        for (int i = 0; i < len - 2; i++) {
            int left = i + 1, right = len - 1;
            // 去重
            //至少要有四个数,前面len-2,这里i>0才行 比如这个用例[0,0,0]
            //这里num[i] == num[i - 1] ,不能num[i] == num[i + 1] ,否则会漏情况
            if (i > 0 && num[i] == num[i - 1]) {
                continue;
            }
            while (left < right) {
                if (num[i] + num[left] + num[right] == 0) {
                    ArrayList<Integer> path = new ArrayList<>();
                    path.add(num[i]);
                    path.add(num[left]);
                    path.add(num[right]);
                    // 符合条件的数组添加到返回的列表中
                    res.add(path);
                    left++;
                    right--;
                    // 去重 注意使用while循环,重复的数组可能不止一个
                    while (left < right && num[left] == num[left - 1]) {
                        left++;
                    }
                    // 去重
                    while (left < right && num[right] == num[right + 1]) {
                        right--;
                    }
                } else if (num[i] + num[left] + num[right] > 0) {
                    right--;
                    // 去重
                    while (left < right && num[right] == num[right + 1]) {
                        right--;
                    }
                } else {
                    left++;
                    // 去重
                    while (left < right && num[left] == num[left - 1]) {
                        left++;
                    }
                }
            }
        }
        return res;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
少年郎as:这不把公司名贴出来那我可要喷你了哦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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