Skip to content

Instantly share code, notes, and snippets.

@arjunrao87
Created December 21, 2014 16:16
Show Gist options
  • Save arjunrao87/01b1d176e733455ea7a9 to your computer and use it in GitHub Desktop.
Save arjunrao87/01b1d176e733455ea7a9 to your computer and use it in GitHub Desktop.
Given an unsorted array of n integers, find a pair of integers whose sum = k
//Method 1 : Time = O(n), Space = O(1)
public List<Pair<Integer, Integer>> getPairsOfIntegers( int[] numbers, int sum ){
List<Pair<Integer,Integer>> results = new ArrayList<>();
int[] sortedNumbers = doRadixSort( numbers );
int left = 0;
int right = sortedNumbers.length - 1;
while( left < right ){
int currentSum = sortedNumbers[ left ] + sortedNumbers[ right ];
if ( currentSum == sum ){
results.add( new Pair<Integer,Integer>( sortedNumbers[ left ], sortedNumbers[ right ] );
} else if ( currentSum < sum ){
left++;
} else if ( currentSum > sum ){
right --;
}
}
return results;
}
//Method 2 : Time = O(n), Space = O(n)
public List<Pair<Integer, Integer>> PairOfIntegers2( int[] numbers, int sum ){
List<Pair<Integer,Integer>> results = new ArrayList<>();
Map<Integer, Integer> map = new HashMap<>();
for( int i = 0; i< numbers.length; i++ ){
int current = numbers[i];
Integer difference = sum - current;
if( map.containsKey( current ){
results.add( new Pair<Integer, Integer>( current, difference );
} else{
map.put( difference, current );
}
}
return results;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment