1. 程式人生 > 其它 >Leetcode第一題兩數和twoSum解法

Leetcode第一題兩數和twoSum解法

技術標籤:Leetcode刷題leetcodehashmapc++演算法

第一種暴力解法,時間複雜度 O ( n 2 ) O(n^{2}) O(n2)
雙層迴圈

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i=0;i<nums.size();i++)
        {
            for(int j=i+1;j<nums.size();j++)
            if(nums[
i]+nums[j]==target) return {i,j}; } return {}; } };

執行時間在這裡插入圖片描述

第三種:Map/HashMap解法,複雜度 O ( n ) O(n) O(n)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hashmap;
        unordered_map<int
,int>::iterator hfind; for(int i=0;i<nums.size();++i) { hfind=hashmap.find(target-nums[i]); if(hfind!=hashmap.end()) return {hfind->second,i}; hashmap[nums[i]]=i; } return {}; } };
class Solution {
public:
    vector<
int> twoSum(vector<int>& nums, int target) { map<int,int> smap; for(int i=0;i<nums.size();++i) { auto mfind=smap.find(target-nums[i]); if(mfind!=smap.end()) return {mfind->second,i}; smap.insert(make_pair(nums[i],i)); } return {}; } };

在這裡插入圖片描述
使用map或者hashmap有時候差距不大。需要注意的是資料的插入要在查詢之後,如果是在查詢之前,那麼會出現一個數被用2次的情況。比方說,nums=[2,4,5,7,9];target=10;
如果是先插入的話,那麼在插入了5之後,target-5=5,因此會同樣查到非end的值,輸出結果為{2,2}