package com.interview.algorithms.array;
import com.interview.basics.sort.QuickSorter;
import com.interview.utils.models.Pair;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Created with IntelliJ IDEA.
* User: stefanie
* Date: 7/22/14
* Time: 4:42 PM
*/
public class C4_32_PairSumK {
static QuickSorter<Integer> sorter = new QuickSorter<>();
public static Pair<Integer> findPairBySort(Integer[] a, Integer K){
sorter.sort(a);
int i = 0;
int j = a.length - 1;
while(i < j){
int sum = a[i] + a[j];
if(sum == K) return new Pair<>(a[i], a[j]);
else if(sum > K) j--;
else i++;
}
return null;
}
public static List<Pair> findPairs(Integer[] a, Integer K){
sorter.sort(a);
List<Pair> pairs = new ArrayList<>();
Integer[] b = new Integer[a.length];
for(int i = 0; i < a.length; i++) b[i] = K - a[i];
int i = 0;
int j = a.length - 1;
while(j >= 0 && i < a.length){
if(a[i] == b[j]) pairs.add(new Pair(a[i++], K-b[j--]));
else if(a[i] < b[i]) i++;
else j--;
}
return pairs;
}
public static List<Pair> findPairsON(Integer[] a, Integer K){
List<Pair> pairs = new ArrayList<>();
Set<Integer> hash = new HashSet<Integer>();
for(int i = 0; i < a.length; i++) hash.add(K - a[i]);
for(int i = 0; i < a.length; i++){
if(hash.contains(a[i])) pairs.add(new Pair(a[i], K - a[i]));
}
return pairs;
}
}