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));
}
}