这道题我们采用哈希表进行解决,首先介绍一下map的用法。
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// 声明
map<string, int> mp;
// 1. 插入数据
mp["Apple"] = 5;
mp["Banana"] = 3;
mp.insert({"Orange", 8}); // C++11 列表插入
// 2. 查找数据(推荐做法,不会误插数据)
string key = "Apple";
if (mp.count(key)) { // count 在 map 中只有 0 或 1
cout << key << " 的数量是: " << mp[key] << endl;
}
// 3. 遍历(C++17 结构化绑定,最优雅)
for (auto& [name, count] : mp) {
cout << name << " -> " << count << endl;
}
return 0;
}
map 的底层逻辑是一棵红黑树(一种自平衡二叉搜索树)。当你插入元素时,它会根据键(Key)的大小自动调整位置。
这里我们采用不排序的map即可,循环每次将数值和对应的位置存入map,每次查找是否已经有target-nums【i】的值已经出现。若出现,就返回即可。
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 {mp[target-nums[i]],i};
}
else{
mp[nums[i]]=i;
}
}
return {};
}
};


