给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
——题目难度:简单
遍历两遍数组的哈希表解题
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, pair<int, int>> mp; //key为元素的值,val里<int, int>分别为元素所出现的次数 和 在数组中的位置
for(int i = 0; i < nums.size(); i++) {
mp[nums[i]].first++;
mp[nums[i]].second = i;
}
for(int i = 0; i < nums.size(); i++) {
mp[nums[i]].first--;
if (mp[target - nums[i]].first) return {i, mp[target - nums[i]].second};
}
return {0, 0};
}
};
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp; //key为数组中元素的值 val为该值在数组中的位置
for(int i = 0; i < nums.size(); i++) {
mp.insert({nums[i], i});
}
for(int i = 0; i < nums.size(); i++) {
//判断是否找到目标元素 并且 该元素不能是 其本身
if (mp.count(target - nums[i]) && mp[target - nums[i]] != i) {
return {i, mp[target - nums[i]]};
}
}
return {-1, -1};
}
};
遍历一遍数组的哈希表解题
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp;
for(int i = 0; i < nums.size(); i++) {
if (mp.count(target - nums[i]))
return {i, mp[target - nums[i]]};
mp[nums[i]] = i;
}
return {-1, -1};
}
};