【LeetCode】001
阿新 • • 發佈:2018-11-23
#include <iostream> #include <vector> #include <unordered_map> using namespace std; class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> nums_map; for(int i = 0; i < nums.size(); ++i ){ unordered_map<int, int>::iterator ite = nums_map.find(target - nums[i]); if(ite != nums_map.end()) return {ite->second, i}; else nums_map.insert(unordered_map<int, int>::value_type(nums[i], i)); } } }; int main() { Solution sol; vector<int> a; for(int m = 0; m<5; m++){ a.push_back(m); } vector<int> result1 = sol.twoSum(a, 7); for(int k = 0; k < result1.size(); k++){ cout<<result1[k]; } cout<<endl; return 0; }
1.unordered_map使用雜湊表,查詢(鍵值)速度比普通map要快;
2.主要思路不是直接建立雜湊表,而是先遍歷vector中的數值,到雜湊表中查詢鍵值為target-num[i]的元素,並返回unordered_map<int, int>::iterator型別或auto(自動識別)的迭代器ite;
3.find的結果是迭代器,而我們需要的是迭代器指向的元素的second成員,即值;
4.找不到則以num[i]為鍵,i為值新增到雜湊表中等待被檢索,被insert的應該是pair<int, mint>型別的,或者乾脆寫unordered_map<int, int>::value_tpe型;
5.map不能被修改,因為map是有序的,打亂後就不正常了,因此需要使用insert,不過一開始雜湊表是空白的,也可以使用nums_map[num[i]] = [i]進行賦值;
6.vector除了使用迴圈語句還有更高效的輸出的方法麼?