给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
package com.qianfeng.test;
import java.util.Scanner;
public class test4 {
public static void main(String[] args) {
int[] arr = new int[6];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
test(arr);
}
public static void test(int[] arr) {
System.out.println("满足要求的三元组集合为:");
System.out.println("[");
int N = arr.length;
int Pre0 = 0, Pre1 = 0, Pre2 = 1;
BubbleSort(arr);
for (int i = 1; i < N - 1; i++) {
int Start = 0, End = N - 1;
int Sum = arr[Start] + arr[End] + arr[i];
while (Sum != 0) {
if (Sum < 0)
Start++;
else if (Sum > 0)
End--;
if (Start >= i || End <= i)
break;
Sum = arr[Start] + arr[End] + arr[i];
}
if (Sum == 0 && (Pre0 != arr[Start] || Pre1 != arr[i] || Pre2 != arr[End]))// 防止重复
{
System.out.println(" [" + arr[Start] + "," + arr[i] + "," + arr[End] + "]");
Pre0 = arr[Start];
Pre1 = arr[i];
Pre2 = arr[End];
}
}
System.out.println("]");
}
public static void BubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++)
for (int j = 0; j < arr.length - 1 - i; j++)
if (arr[j] > arr[j + 1]) {
arr[j] = arr[j] ^ arr[j + 1];
arr[j + 1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
}
}
}