Two Sum(C++兩數之和)

解題思路:

(1)使用組合,可惜耗時比較久,笑哭

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> v={0,0};
        combination(v, nums, target, 0, 0, 2);
	return v;
    }
    
    int combination(vector<int> &v, vector<int> &nums, int target, int begin, int index,int k) {
        if(k==0) {
            if(nums[v[0]]+nums[v[1]]==target) return 1;
            else return 0;
        }

        for(int i=begin;i<nums.size();i++) {
            v[index]=i;
            if(combination(v,nums,target,i+1,index+1,k-1)==1) return 1;
        }
        return 0;
    }

};

(2)使用unordered_map,減少查詢速度,即使錯過了第一個,也不會錯過第二個

(3)參考網址:https://leetcode.com/problems/two-sum/discuss/13/Accepted-C%2B%2B-O(n)-Solution

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> imap;
        
        for (int i = 0;; ++i) {
            auto it = imap.find(target - nums[i]);
            
            if (it != imap.end()) 
                return vector<int> {i, it->second};
                
            imap[nums[i]] = i;
        }
    }

};

 

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