In this artcile, we will learn to resolve the 3Sum problem by using two pointers algorithm

## Problem

Given an array of integers

`A[N]`

and an integer number`targetSum`

Find if existing in

`A`

three integers`A[i]`

,`A[j]`

and`A[k]`

such that`A[i] + A[j] + A[k] = targetSum`

## Example

Input:

`A[8] = {4, -9, 0, 11, 6, -20, 1, 7}`

,`targetSum = 10`

Expected output:

`true`

Explanation: 4 + 0 + 6 = 10

## Two pointers approach

Sort the given array A

Traverse through A from i = 0 to i = A.length - 2.

For each index i, use two indices j and k with j = i + 1 and k = A.length - 1 to walk inward the array

Do the following while j < k

Calculate sum of A[i], A[j], and A[k]

Return true if sum equals to targetSum. Otherwise increase j by 1 if sum < targetSum, or decrease k by 1 if sum > targetSum

Return false after exit 2 loops

```
import java.util.Arrays;
public class TwoPointers_3Sum {
boolean contains3(int[] a, int targetSum) {
Arrays.sort(a);
for (int i = 0; i < a.length - 2; i++) {
int j = i + 1;
int k = a.length - 1;
while (j < k) {
int sum = a[i] + a[j] + a[k];
if (sum == targetSum) {
return true;
} else if (sum < targetSum) {
j++;
} else {
k--;
}
}
}
return false;
}
public static void main(String[] args) {
int[] a = {4, -9, 0, 11, 6, -20, 1, 7};
System.out.println(new TwoPointers_3Sum().contains3(a, 10));
}
}
```

Output

```
true
```

Complexity

Time complexity: O(n

^{2})Space complexity: O(1)