7. Two Sum

Topic :

arrays

Difficulty :

easy

Problem Link :


problem statement

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.


Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]
 

Constraints:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • Only one valid answer exists.

Follow-up: Can you come up with an algorithm that is less than O(n2) time complexity?


solution

Approach 1: USING HASHING

TIME COMPLEXITY:O(N)

SPACE COMPLEXITY: O(N)

import java.io.*;
import java.util.*;
class Two_Sum_HashTable
{ 
    static ArrayList<Integer> TwoSum(int a[], int sum)
    {
        ArrayList<Integer> ans=new ArrayList<>();
        Map<Integer,Integer> map =new HashMap<>();
        for(int i=0;i<a.length;i++)
        { if(map.containsKey(sum-a[i]))
            {ans.add(i);
             ans.add(map.get(sum-a[i]));
             break;
            }
          else
          { map.put(a[i],i);
            }
        }
        
         return ans;
    }
    public static void main(String args[])
    { int a[] ={2,7,11,15};   
      System.out.println(TwoSum(a,18));
   }
}

Approach 2: USING TWO POINTER

TIME COMPLEXITY:O(N)

SPACE COMPLEXITY:O(1)

import java.io.*;
import java.util.*;
class Two_Sum_Two_Pointer
{ 
    static ArrayList<Integer> TwoSum(int a[],int sum)
    {
        ArrayList<Integer> ans=new ArrayList<>();
        Arrays.sort(a);
        int low=0;
        int high=a.length-1;
        for(int i=0;i<a.length;i++)
        {  int curr_sum=a[low]+a[high];
            if(curr_sum==sum)
            {ans.add(a[low]);
             ans.add(a[high]);
             }
             if(curr_sum>sum)
             high--;
             else 
             low++;
        }
         return ans;
    }
    public static void main(String args[])
    { int a[] ={2,7,11,15};   
       System.out.println(TwoSum(a,9));
   }
}
Copyright © 2023 KIZLE. - All Rights Reserved.
Website by Kounik Maitra