> 文章列表 > 用Java做LeetCode第一题:两数之和

用Java做LeetCode第一题:两数之和

用Java做LeetCode第一题:两数之和

题目:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

此题主要考察HashMap的理解。两数相加等于一个数,已知结果数,求另一个数组中的x和y以及下标。如果不用HashMap的话,可以使用双层for循环实现

如下:

 此方法为暴力的解法,时间复杂度是O(n^2)。

所以更优的解决方案是使用Map,Map是一种key-value的存储结构,可以用key保存数值,用value再保存数值所在的下标。

再明确一下,这道题我们需要给出一个元素,判断这个元素是否出现过,如果出现过,返回这个元素的下标。

那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。

再遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到匹配的对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。

如下:

 总结:

本题可以用来学习熟悉map是用来做什么的,以及map中的key和value分别用来存放什么,可以让我们更能清楚该什么时候用map,清楚它的好处,了解它的底层