欢迎光临
我们一直在努力

1. 两数之和

这道题我们采用哈希表进行解决,首先介绍一下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 {};
}
};

赞(0)
未经允许不得转载:171主机测评 » 1. 两数之和
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址