3Sum LeetCode

 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.

 

code :1

import java.util.*;

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();
        int n = nums.length;
        Arrays.sort(nums); // Step 1: Sort the array

        for (int i = 0; i < n - 2; i++) {
            // Skip duplicate elements for 'i'
            if (i > 0 && nums[i] == nums[i - 1]) continue;

            int left = i + 1, right = n - 1;
            int target = 0;

            while (left < right) {
                int sum = nums[i] + nums[left] + nums[right];

                if (sum == target) {
                    // Store triplet
                    ans.add(Arrays.asList(nums[i], nums[left], nums[right]));

                    // Move left and right pointers while avoiding duplicates
                    while (left < right && nums[left] == nums[left + 1]) left++;
                    while (left < right && nums[right] == nums[right - 1]) right--;

                    left++;
                    right--;
                } else if (sum < target) {
                    left++; // Increase sum
                } else {
                    right--; // Decrease sum
                }
            }
        }
        return ans;
    }

    // public static void main(String[] args) {
    //     Solution sol = new Solution();
    //     int[] nums = {-1, 0, 1, 2, -1, -4};
    //     System.out.println(sol.threeSum(nums));
    // }
}



Code 2:

class Solution {

    // Should return true if there is a triplet with sum equal

    // to x in arr[], otherwise false

    public static boolean hasTripletSum(int arr[], int target) {

        // Your code Here

        Arrays.sort(arr);

        int n=arr.length;

        for(int i=0;i<n-2;i++)

        {

           int start=i+1;

            int end=arr.length-1;

            while(start < end)

            {

           int sum=arr[i]+arr[start]+arr[end];

            

            if(sum == target)

            {

                return true;

            }

            else if(sum < target)

            {

                start++;

            }

            else

            {

                end--;

            }

            }

        }

        return false;

    }

}




Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence