哈希表--两数之和
? ? ? 題目描述:
? ? ? 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。
? ? ?你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。
? ? ?示例:
? ? ?給定 nums = [2, 7, 11, 15], target = 9
? ? ?因為 nums[0] + nums[1] = 2 + 7 = 9
? ? ?所以返回 [0, 1]
?
? ? ?暴力解法就是用2層for循環,下面看下哈希表的解法:
#include <iostream> #include <vector> #include<unordered_map>using namespace std;class Solution { public:vector<int> twoSum1(vector<int>& nums, int target) {//方法1:兩遍哈希vector<int> res;if(nums.size() < 2)return res;//數組中至少有兩個數時,創建哈希表的key-valueunordered_map<int,int> mymap;for(auto i = 0;i < nums.size();i++){//將值作為hash表的下標mymap[nums[i]] = i;//值-下標}//查找for(auto i = 0;i < nums.size();i++){int temp = target - nums[i];unordered_map<int,int>::iterator iter = mymap.find(temp);//保證不是同一個數重復利用if(iter != mymap.end() && iter->second != i){res.push_back(i);res.push_back(iter->second);break;}}return res;}vector<int> twoSum2(vector<int>& nums, int target) {//方法2:一遍哈希vector<int> res;if(nums.size() < 2)return res;//數組中至少有兩個數,創建哈希表unordered_map<int,int> mymap;unordered_map<int,int>::iterator iter;for(auto i = 0;i < nums.size();i++){int temp = target - nums[i];//要找的那個值iter = mymap.find(temp);if(iter != mymap.end()){res.push_back(iter->second);res.push_back(i);break;}//沒找到mymap[nums[i]] = i;//值-下標}return res;} };? ?哈希表鍵存儲數組的值,哈希表值存儲數組的下標。
?
代碼地址:https://leetcode-cn.com/problems/two-sum/solution/ha-xi-biao-by-jian-yi-9-2
總結
- 上一篇: 求字符串中最长无重复子序列
- 下一篇: 动态规划-最长回文子串