题目
解题思路
这道题经典简单题了,毕竟第一题嘛,第一天开始刷,从数组开始没想到就刷到这一题了。
这题一看完题目肯定就做出来双重循环的解法了。
想降低时间复杂度就要想办法只循环一次,那就是要使用到Map的数据结构了。思路就是说每一次循环都是先找找map里面有没有存在着【target减去我当前指向值的另一个值】的【索引(也就是数组位置)】,如果没有就存放当前值和索引的key-value,要切记必须是值做key,索引做value。
代码
class Solution {
public int[] twoSum(int[] nums, int target) {
int len = nums.length;
Map<Integer,Integer> mp = new HashMap<Integer,Integer>();
for(int i = 0; i < len; i++) {
// ② map中查找是否有 target - curvalue的数据
if(mp.containsKey(target - nums[i]))
return new int[]{mp.get(target - nums[i]), i};
// ① 数组中的每个数放入map中
mp.put(nums[i], i);
}
return new int[0];
}
}