题目
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
- One
public int[] twoSum(int[] old, int target){
for(int i=0; i<old.length; i++) {
for(int j=0; j<old.length; j++){
if(target == old[i]+old[j]){
return new int[] { i , j };
}
}
}
throw new IllegalArgumentException("No two sum solution");
}
用两个for循环找对应的解,时间复杂度是O(n2)
空间复杂度是O(n)
- Two
public int[] twoSum(int[] old, int target){
Map<Integer,Integer> map = new HashMap<>{};
for(int i=0; i<old.length; i++) {
map.put(old[i],i);
}
for(int i=0; i< old.length; i++){
int complement = target - old[i];
if(map.containKey(complement) && map.get(old[i]) != i){
return new Int[] { i , map.get(complement)};
}
}
throw new IllegalArgumentException("No two sum solution");
}
算法循环 f(n) = 2n,时间复杂度为O(n)
空间复杂度为O(n),因为map的存在,所以我们必须再去开辟长度为n的空间
- Three
public int[] twoSum(int[] sums, int target) {
Map<Integer,Integer> map = new HashMap<>{};
for(int i=0; i< sums.length; i++){
int complement = target - sums[i];
if(map.containKey(complement) && map.get(complement) != i){
return new Int[]{ i , map.get(complement)};
}
map.put(sums[i],i);
}
throw new IllegalArgumentException("No tow sum solution");
}
算法循环是f(n) = n,时间复杂度是O(n)
空间复杂度是O(n)