1. 两数之和(C++)---哈希表解题

    科技2022-07-10  137

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

     

    示例:

    给定 nums = [2, 7, 11, 15], target = 9

    因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum

     

    ——题目难度:简单

     


    遍历两遍数组的哈希表解题

    class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, pair<int, int>> mp; //key为元素的值,val里<int, int>分别为元素所出现的次数 和 在数组中的位置 for(int i = 0; i < nums.size(); i++) { mp[nums[i]].first++; mp[nums[i]].second = i; } for(int i = 0; i < nums.size(); i++) { mp[nums[i]].first--; if (mp[target - nums[i]].first) return {i, mp[target - nums[i]].second}; } return {0, 0}; } }; class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> mp; //key为数组中元素的值 val为该值在数组中的位置 for(int i = 0; i < nums.size(); i++) { mp.insert({nums[i], i}); } for(int i = 0; i < nums.size(); i++) { //判断是否找到目标元素 并且 该元素不能是 其本身 if (mp.count(target - nums[i]) && mp[target - nums[i]] != i) { return {i, mp[target - nums[i]]}; } } return {-1, -1}; } };

     

    遍历一遍数组的哈希表解题

    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 {i, mp[target - nums[i]]}; mp[nums[i]] = i; } return {-1, -1}; } };

     

    Processed: 0.032, SQL: 8