Day_8 —— LeetCode练习题:两数之和
1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
- 首先,我们先遍历数组nums,i为当前元素下标,我们需要将每一个遍历的值放入map中做为key,元素下标作为value;
- 同时,对每一个元素都判断map中是否存在target-nums[i]的key值。这里的话,9-7=2,2在map中已存在;
- 所以2和7所在的key值对应的value,也[0,1],就是我们要的两个数组下标。
C++实现:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
//建立一对一的hash
map<int,int> a_map;
//用来存储找到的结果下标,初始化一个大小为2,值为0的容器b
vector<int> b(2,0);
int size=nums.size();
for(int i=0;i<size;++i)
{
if(a_map.count(target-nums[i])>0)
{
b[0]=a_map[target-nums[i]];
b[1]=i;
break;
}
a_map[nums[i]]=i;//反过来放入map中,用来获取结果下标
}
return b;
};
};
python实现:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
length = len(nums)
dict_nums = {nums[i]:i for i in range(length)}
for i in range(length):
a = nums[i] # key值
b = target - a
if b in dict_nums and i != dict_nums[b]:
return [i, dict_nums[b]]