如题
与之前那个三数之和的可能序列有异曲同工之妙,但是那个是需要去重,这个则需要计算全部可能。那么先用相似的双指针法来实现
public static int threeSumMulti(int[] A, int target) {
double count = 0;
if (A == null || A.length < 3) {
return (int)count;
}
Arrays.sort(A);
for (int i = 0; i < A.length - 2; i++) {
if (A[i] > target) { //同样的退出条件
break;
}
int m = i + 1;
int n = A.length - 1;
int flagm = 0; //前面存在的相同元素个数
int flagn = 0; //后面存在的相同元素个数
while (m < n) {
if (A[i] + A[m] + A[n] < target) { //和值小于目标则m++
m++;
} else if (A[i] + A[m] + A[n] > target) { //大于目标则n--
n--;
} else {
if (A[m + 1] == A[m]) { //元素相同则计数+1
flagm++;
m++;
} else if (A[n - 1] == A[n]) {
flagn++;
n--;