leetcode: 1. Two Sum
class Solution {
public: // 为了便于判断是否存在,将下标映射统一向后延后1
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp;
for (int i = 0 ; i < nums.size(); i++) {
int x = nums[i];
if (mp[target - x] != 0) {
return {mp[target - x] - 1, i};
} else {
mp[x] = i + 1; // 这里临时做一个偏移
}
}
return {-1, -1};
}
};
使用unordered_map自带的find()函数简化了边界处理:
class Solution {
public: // 为了便于判断是否存在,将下标映射统一向后延后1
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp;
for (int i = 0; i < nums.size(); i++) {
auto iter = mp.find(target - nums[i]);
if (iter != mp.end()) {
return {iter->second, i};
} else {
mp[nums[i]] = i;
}
}
return {};
}
};