在數組中尋找兩個數之和等於目標數


本道題目我起初的想法是暴力尋找兩個數之和,每次與目標數進行比對,這樣的時間復雜度是O(n2)。

改進:

我使用散列表將數組元素散列存儲,這樣便可以對元素進行O(1)訪問,從而實現在O(n)的時間復雜度解決該問題。

#include  <iostream>
#include <cstdio>
#include <vector>
#include <map>


using namespace std;

vector<int> twoSum(vector<int>& nums, int target) ;
int main()
{
    int vector_num, target ;
    cin>>vector_num;
    vector<int> nums(vector_num);
    for(int i = 0; i < vector_num; ++i)
    {
        cin >> nums.at(i);
    }
    cin>>target;
    vector<int> ans = twoSum(nums,target);
    for(int i = 0;i<ans.size();++i)
    {
        cout<<ans.at(i)<<endl;
    }
    return 0;
}

vector<int> twoSum(vector<int>& nums, int target)
{
    vector<int> ans;
    map<int, int> hashmap;
    for (int i = 0; i < nums.size(); i++)
    {
        hashmap.insert(pair<int, int>(nums[i], i));
    }
    for (int i = 0; i < nums.size(); i++)
    {
        int complement = target - nums[i];
        map<int, int>::iterator iter;
        iter = hashmap.find(complement);
        if (iter != hashmap.end() && hashmap.at(complement) != i)
        {
            ans =  {i, hashmap.at(complement) };
        }
    }
    return ans;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM