3 Sum

Problem

Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.

Notice that the solution set must not contain duplicate triplets.

Example 1:

Input: nums = [-1,0,1,2,-1,-4]
Output: [[-1,-1,2],[-1,0,1]]
Explanation:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0.
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0.
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0.
The distinct triplets are [-1,0,1] and [-1,-1,2].
Notice that the order of the output and the order of the triplets does not matter.

Example 2:

Input: nums = [0,1,1]
Output: []
Explanation: The only possible triplet does not sum up to 0.

Example 3:

Input: nums = [0,0,0]
Output: [[0,0,0]]
Explanation: The only possible triplet sums up to 0.

Constraints:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

Solution

Nobody could possibly derive this during an interview.

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        var ans = new ArrayList<List<Integer>>();
        for (var i = 0; i < nums.length - 2; i++) {
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            twoSum(nums, i, ans);
        }
        return ans;
    }

    public void twoSum(int[] nums, int i, List<List<Integer>> ans) {
        var li = i + 1;
        var ri = nums.length - 1;
        while (li < ri) {
            var sum = nums[li] + nums[ri] + nums[i];
            if (sum == 0) {
                ans.add(List.of(nums[i], nums[li], nums[ri]));
                li += 1;
                ri -= 1;
                while (li < ri && nums[li] == nums[li - 1]) {
                    li += 1;
                }
            } else if (sum < 0) {
                li += 1;
            } else {
                ri -= 1;
            }
        }
    }
}

Recent posts from blogs that I like

Bookbear Local 9/20/26

odds and ends

via bookbear express

Painting la Manche: le Havre to Ouessant

Paintings by Paul Signac, Claude Monet, Félix Vallotton, Millet, John Singer Sargent, Maurice Denis, and others.

via The Eclectic Light Company

System One models like Jev can train their own replacements

“System One” models like Jev are fast general classifiers. Classifiers have existed since 1958, but they have to be trained for specific tasks: if you build a classifier to identify images of dogs, it can’t be used to tell you if a streetlight is red, or if a letter is urgent. Like a LLM, Jev can be...

via Sean Goedecke