Leetcode 1.两数之和
题目意在对数组的快速查找
思路:哈希表
先创建一个哈希表,然后对数组进行遍历,iter代表用目标值依次减去遍历数组中的元素后得出的值,如果这个值在map中存在,则返回其索引和当前数组元素中的索引;若不存在,则将当前数组元素作为新的键值对插入表中
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map;//unordered_map<KeyType, ValueType> variableName;创建哈希表的基本格式
for (int i = 0; i < nums.size(); i++){//.find()方法用于在容器中查找具有特定键的元素
auto iter = map.find(target - nums[i]);//auto 是一个类型推断关键字,它让编译器自动推断变量 iter 的类型,这里iter的类型是unordered_map 的迭代器类型
if (iter != map.end()){//unordered_map 的 find 方法会返回一个迭代器,指向找到的元素,如果找到了元素,迭代器指向该元素;如果没有找到,迭代器将等于 map.end(),这是一个特殊的迭代器,表示容器的“结束”
return {iter -> second, i};
}
map.insert(pair<int, int>(nums[i], i));
}
return {};
}
};
注意:find查找的是键
完整代码(参考)
#include <iostream>
#include <vector>//如果你声明了一个vector<int> 类型的变量,编译器会使用 <vector> 头文件中的定义来创建一个动态数组,这个数组可以存储整数,并根据需要自动调整大小
#include <unordered_map>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); i++) {
auto iter = map.find(target - nums[i]);
if (iter != map.end()) {
return {iter->second, i};
}
map[nums[i]] = i;
}
return {};
}
int main() {
int n, target;
cin >> n >> target;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
vector<int> result = twoSum(nums, target);
if (!result.empty()) {
cout <<result[0]<<result[1] << endl;
} else {
cout << "没有找到符合条件的两个数" << endl;
}
return 0;
}
原文地址:https://blog.csdn.net/2301_80401457/article/details/144080397
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!