题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
分析:
最简单的方法是用一个双重循环,i从0到n-1, j从0到n-1, i不等于j, 逐个检查nums[i] + nums[j]是否等于target,如果等于则返回i和j。
时间复杂度 O(n^2)
最优解法如下
用一个循环把数组nums过一遍,把key = nums[i], value = i 放入一个map里,然后查看map里是否曾出现过val = target - nums[i]。如果出现过,则证明val + nums[i] = target,也就找到了答案了。
时间复杂度 O(n),因为只用了一个循环,map的操作只需要O(1)
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
int[] ret = {0, 0};
for(int i = 0; i < nums.length; i++) {
int t = target - nums[i];
Integer index = map.get(t);
if(index != null) {
ret[0] = index;
ret[1] = i;
return ret;
}
map.put(nums[i], i);
}
return null;
}
}