LeetCode Hot100 两数之和 Java代码详细教程
两数之和作为LeetCode hot 100的入门题目,对于刚学算法的小白来说还是有一定难度的,下面我将详细讲解它的实现思路和代码逻辑
实现思路:
对于数组中的两数之和要等于目标值,我们可以通过遍历数组元素来判断,是否有符合相加等于目标值的两个元素,我们需要解决的是,当遍历到数组中的其中一个元素时,我们如何从前面已经遍历过的元素中,快速找到符合条件的元素,这就需要使用到HashMap集合。
为什么使用哈希方法来解此题?
对于需要判断某个元素是否出现过,或者判断某个元素是否在集合里出现过时,可以使用哈希法,使用一些哈希表的结构来处理。
对于此题,因为我们在遍历数组元素时,我们要存放之前遍历过的数组元素,比如我们遍历到某一个元素7时,目标值为9,我们要判断一下之前遍历过的数组元素中,是否遍历过元素2,让二者之和等于目标值9。
判断一个元素是否遍历过,我们可以将遍历过的元素存到一个集合中,当我们每次遍历到新的数组元素时,我们就可以判断,需要寻找的元素是否在这个集合中出现过。如果在这个集合中出现过,那就是之前在数组中遍历过此元素。
为什么使用HashMap结构?
由于我们不仅仅需要判断数组元素是否遍历过,两个数组元素相加是否等于目标值,还需要返回符合条件的两个数组元素的下标,因此HashMap是最适合存储遍历过的数组元素,和它的数组下标的。
同时,我们需要注意,此处Map的key存放的是数组元素,key对应的Value存放的数组元素的下标。 原因:我们需要查找的是一个数组元素是否在集合中出现过,所以我们必须通过key来存放数组元素,Map能在最短的时间内,查找这个key是否在Map中出现过。
实现代码如下:
class Solution {
public int[] twoSum(int[] nums, int target) {
//使用HashMap存储遍历过的数组元素
Map<Integer,Integer> map = new HashMap<>();
//for循环遍历nums数组
for(int i = 0; i < nums.length ; i++){
//获取符合条件的key — 目标值减去当前遍历的数组元素 得到我们需要在集合中寻找的另一个数组元素
int temp = target – nums[i];
//判断map中是否遍历过该元素,是否存在该key
if(map.containsKey(temp)){
return new int [] {map.get(temp),i};// 根据key(temp),获取对应的value(数组下标)
}
//将遍历过的数组元素,存入map集合中
//记得此处是元素作为key,数组下标为value
map.put(nums[i],i);
}
//没找到,返回长度为0的空数组
return new int[0];
}
}
网硕互联帮助中心



评论前必须登录!
注册