如图示例,先遍历到了2,然后计算anotherNum = target - nums[i],然后判断map里有没有anotherNum这个key,刚开始的时候map里面是空的,所以执行else语句map.put(nums[i],i),把遍历到的值和它的下标记录到map里。
然后遍历到了7,执行anotherNum = target - nums[i]的计算,此时anotherNum = 2,执行map.containsKey(anotherNum)判断map是否有2这个key,如图所示,map是有2这个key。于是把两个数的下标返回。
class Solution {
public int[] twoSum(int[] nums, int target) {
//建立一个map
HashMap<Integer,Integer> map = new HashMap<>();
//遍历数组
for(int i = 0;i < nums.length;i++){
//计算anotherNum
int anotherNum = target - nums[i];
//map中是否有anotherNum
if(map.containsKey(anotherNum)){
//有就返回两个数的下标
return new int[]{map.get(anotherNum),i};
}else{
//没有就把当前的数和它的下标放到map中
map.put(nums[i],i);
}
}
//如果遍历完数组都找不到符合的数,就返回0
return new int[0];
}
}