网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 976|回复: 0
打印 上一主题 下一主题

Java编程-数组中相加为0的三元组

[复制链接]

97

主题

98

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
跳转到指定楼层
楼主
发表于 2020-9-7 21:41:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目描述
给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。
注意:
三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
解集中不能包含重复的三元组。
例如,给定的数组 S = {-1 0 1 2 -1 -4},解集为(-1, 0, 1) (-1, -1, 2)
通过代码(by孙笑川♔):
import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        Arrays.sort(num);
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        ArrayList<Integer> t;
        int len = num.length;
        for(int i = 0; i < len - 2; i++){//len-3,len-2,len-1
            if(i == 0 || num[i] != num[i-1]) {
                int left = i + 1;
                int right = len - 1;
                while (left < right){
                    while (left < right && (num[i] + num[left] + num[right]) > 0) {
                        right--;
                    }
                    if (left < right && (num[i] + num[left] + num[right]) == 0) {
                        t = new ArrayList<>();
                        t.add(num[i]);
                        t.add(num[left]);
                        t.add(num[right]);
                        res.add(t);
                        while (left < right && num[left] == t.get(1)) {
                            left++;
                        }
                    } else {
                        left++;
                    }   
                }
            }
        }
        return res;
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 15:56 , Processed in 0.033261 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表