LeetCode-1:兩數之和

一、題目描述

在這裏插入圖片描述

二、解題思路

這道題當然可以暴力,這樣時間複雜度爲O(n2)O(n^2)。所以我採用哈希表來解決。
遍歷一次數組,將其與下標的pair(val,index)pair(val, index)插入到哈希表中。所以我們根據當前的數字去找targetnums[i]target - nums[i]是否在哈希表裏即可。但是如果出現targetnums[i]==nums[i]target - nums[i] == nums[i]的情況時,哈希表會根據keykey查找到與當前的nums[i]nums[i]相同的下標indexindex,導致出錯,所以只有在targetnums[i]target - nums[i]作爲keykey時映射出來的元素的下標與當前元素不等時,才證明找到。

三、解題代碼

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> ump;    //val, index
        vector<int> sln;
        for(int i = 0; i < nums.size(); i++){
            if(ump.find(nums.at(i)) == ump.end())
                ump.insert(make_pair(nums.at(i), i));
            if(ump.find(target - nums.at(i)) != ump.end()){
                if(ump.find(target - nums.at(i))->second != i){
                    sln.push_back(ump.find(target - nums.at(i))->second);
                    sln.push_back(i);
                    return sln;
                }   
            }
        }
        return sln;
    }
};

四、運行結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章