云计算百科
云计算领域专业知识百科平台

LeetCode Hot 100 两数之和

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];
}
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » LeetCode Hot 100 两数之和
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!