【leetcode】5. 数组-两数之和
题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
难易程度:easy
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
题解
分析
本题比较简单,可以简单转换一下,有元素nums[i]
, 数组nums
是否存在target - nums[i]
,即转换成一个查找问题:
- 如果原地查找,不开辟额外空间的话,查找一个元素最好的情况是
O(log(n))
,这还是数组有序的情况下,显然本题数组不是有序; - 可以定义一个map,查找时间复杂度是
O(1)
。
因此,本题,可以这么做: - 遍历数组
nums
,创建map,diff[nums[i]] = i
- 再次遍历
nums
,检查diff[target-nums[i]]
是否存在,如果存在即满足需求
注意,上述方法需要遍历两次数组nums
,其实,可以只遍历一次,边遍历边检查。代码如下
时间复杂度:O(N)
空间复杂度:O(N)
代码
1 | class Solution { |