leetcode1 --两数之和
链接: leetcode01
题目描述
题目分析
大概想法是先用一个hashmap进行遍历,存在hashmap里面,然后我们在对于数组遍历,通过target与当前遍历元素的差值,通过key找到hashmap里面的数值,但是这种思想有一个问题就是hashmap的底层对于相同的数据进行存储,数值相同是挂在下面的,所以代码遇到目标数组的数值是一样的情况下会出问题.
本题呢,我就需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是 是否出现在这个集合。那么我们就应该想到使用哈希法了。因为本地,我们不仅要知道元素有没有遍历过,还有知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。
代码
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> hashMap = new HashMap<>();
int[] res = new int[2];
if (nums == null && nums.length == 0){
return res;
}
for (int i = 0; i < nums.length; i++) {
int temp = target - nums[i];
if (hashMap.containsKey(temp)){
res[0] = hashMap.get(temp);
res[1] = i;
}
hashMap.put(nums[i],i);
}
return res;
}
}
参考
https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html#%E6%80%9D%E8%B7%AF