DDSA Solutions

Closest Three Sum

Time: O(n^2)
Space: O(1)
Advertisement

Intuition

Find triplet with sum closest to target. Sort + two pointers for each anchor.

Algorithm

  1. 1Sort. For each i: two pointers l=i+1, r=n-1. Track minimum |sum-target|. Move pointers based on comparison.

Common Pitfalls

  • Same as LC 16. Sort first. Update closest on each iteration. Early exit if exact match found.
Closest Three Sum.java
Java
// Approach: Sort array. For each element, use two pointers on the remaining array to find the closest sum to target.
// Time: O(n^2) Space: O(1)
import java.util.*;

class Solution {
    static int threeSumClosest(int[] ar, int target) {
        Arrays.sort(ar);
        int ms = ar[0] + ar[1] + ar[ar.length - 1];

        for (int i = 0; i < ar.length - 1; i++) {
            int s = i + 1;
            int e = ar.length - 1;

            while (s < e) {

                int sum = ar[i] + ar[e] + ar[s];
                int dif = Math.abs(sum - target);

                if (dif < Math.abs(ms - target)) {

                    ms = sum;
                } else if (dif == Math.abs(ms - target) && sum > ms) {
                    ms = sum;
                }

                if (sum > target)
                    e--;
                else
                    s++;

            }

        }
        return ms;

    }
}
Advertisement
Was this solution helpful?