-
Notifications
You must be signed in to change notification settings - Fork 46
/
_923_1.java
40 lines (34 loc) · 1 KB
/
_923_1.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.Arrays;
/**
* LeetCode 923 - 3Sum with Multiplicity
*
* Two-pointer approach
*/
public class _923_1 {
public int threeSumMulti(int[] A, int target) {
long res = 0;
Arrays.sort(A);
// Enumerate the smallest and the second smallest pointers.
// Maintain the largest pointer.
for (int i = 0; i < A.length; i++) {
int cnt = 0;
for (int j = i + 1, k = A.length - 1; j < k; ) {
if (cnt == 0) {
for (int kk = k; kk >= 0 && A[kk] == A[k]; kk--) {
cnt++;
}
}
if (A[i] + A[j] + A[k] == target) {
res += Math.min(cnt, k - j);
j++;
} else if (A[i] + A[j] + A[k] > target) {
k -= cnt;
cnt = 0;
} else {
j++;
}
}
}
return (int) (res % 1000000007);
}
}