教育改变生活

标题: Java编程-数组中相加为0的三元组 [打印本页]

作者: 一秉    时间: 2020-9-7 21:41
标题: Java编程-数组中相加为0的三元组
题目描述
给出一个有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;
    }
}





欢迎光临 教育改变生活 (http://bbs.goldoar.com/) Powered by Discuz! X3.2