———————极其个人向的做题记录———————
哈希表的应用问题。
思路:①将数组nums[i]存入哈希表
②每次存入的时候查找(target-a[i])是否也在哈希表中且不为nums[i]本身
易错提醒:map.get(key)函数是需要key来查找value的,所以考虑到之后要通过(target-a[i])来查找数组对应的索引是否为i本身,在添加键值对的时候,
格式应为 "map.put(nums[i],i)”
代码:
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map=new HashMap<>();
int a[]= {0,0};
for(int i=0;i<nums.length;i++) {
int x=target-nums[i];
if(map.containsKey(x)&&i!=map.get(x)) {//如果存在减数且不为被减数本身
a[0]=i;
a[1]=map.get(x);
break;
}else {
map.put(nums[i],i);
}
}
return a;
}
结论:遇到本质是快速查找或者查重的问题,可以考虑采用哈希表。