自学内容网 自学内容网

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)!