1. 程式人生 > >【LeetCode】001

【LeetCode】001

 

#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除了使用迴圈語句還有更高效的輸出的方法麼?