Given a list of numbers and a number k, return whether any two numbers from the list add up to k.
For example, given [10, 15, 3, 7] and k of 17, return true since 10 + 7 is 17.
Bonus: Can you do this in one pass?
Solution
public Boolean checkNumberAddToK(List<Integer> intVals, Integer k){
Boolean sumAddsUpFlag = false;
Set<Integer> diffVals = new Set<Integer>();
for (Integer intVal : intVals){
if (diffVals.isEmpty()){
diffVals.add(k-intVal);
} else {
if (diffVals.contains(intVal)){
sumAddsUpFlag = true;
break;
} else {
diffVals.add(k-intVal);
}
}
}
return sumAddsUpFlag;
}
Test
System.debug(checkNumberAddToK(new List{10, 15, 3, 7}, 17)); //return true
System.debug(checkNumberAddToK(new List{10, 15, 3, 8}, 17)); //return false
Complexity Analysis
Time complexity: O(n)
Space complexity: O(n)