题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
样例
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
算法1
哈希表 $O(n)$
循环遍历数组nums,
1. 判断hash表中是否存在key:target-nums[i],存在则返回
2. 将nums[i]插入到hash表中
解释:由于数据保证有且仅有一组解,假设是i,j,则我们循环到j时,nums[i]一定在哈希表中nums[i]一定在哈希表中,且有 nums[i]+nums[j]==target, 所以我们一定可以找到解。
时间复杂度:由于只扫描一遍,且哈希表的插入和查询操作的复杂度是 O(1),所以总时间复杂度是 O(n).
Java 代码
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i ++ ) {
int t = target - nums[i];
if (map.containsKey(t)) {
return new int[]{i, map.get(t)};
}
map.put(nums[i], i);
}
return new int[]{-1, -1};
}
}