【数据结构和算法】固定一个,求两个数字之和

数组中相加和为0的三元组

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

先对数组排序,然后固定一个数字,再求两个数字之和。

    public ArrayList<arraylist<integer>> threeSum(int[] num) {
        //先排序
        Arrays.sort(num);
        ArrayList<arraylist<integer>> res = new ArrayList<>();
        int length = num.length;
        for (int i = 0; i < length - 2; i++) {
            //过滤掉重复的
            if (i != 0 && num[i] == num[i - 1])
                continue;
            int left = i + 1;
            int right = length - 1;
            int target = -num[i];
            //改为求两数之和
            while (left < right) {
                int midVale = num[left] + num[right];
                if (midVale == target) {
                    res.add(new ArrayList<>(Arrays.asList(num[i], num[left], num[right])));
                    while (left < right && num[left] == num[left + 1])//过滤掉重复的
                        left++;
                    while (left < right && num[right] == num[right - 1])//过滤掉重复的
                        right--;
                    left++;
                    right--;
                } else if (midVale < target)
                    left++;
                else
                    right--;
            }
        }
        return res;
    }

截止到目前我在公众号“数据结构和算法”中已经写了500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666

如果觉得有用就给个赞吧,还可以关注我的《牛客博客》查看更多的详细题解

数据结构和算法 文章被收录于专栏

专注于算法题的讲解,包含常见数据结构,排序,查找,动态规划,回溯算法,贪心算法,双指针,BFS和DFS等等

全部评论
不对呀
点赞 回复 分享
发布于 2021-10-18 16:59
可以先排序,正负两端切开,遍历想加取相反数,在整个数组(扣掉原来的两个下标)里二分查找
点赞 回复 分享
发布于 2022-10-20 20:43 安徽

相关推荐

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