c_cpp 1.两个总和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 1.两个总和相关的知识,希望对你有一定的参考价值。

//Runtime: 260 ms, faster than 2.44% 

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> array;
        
        for(int i = 0;i < nums.size();++i)
            for(int j = i + 1;j < nums.size();++j)
                if(nums[i] + nums[j] == target){
                    array.push_back(i);
                    array.push_back(j);
                }
        return array;
    }
};
//Runtime: 12 ms, faster than 49.79%

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hash;
        vector<int> result;
        
        for(int i = 0;i < nums.size();++i){
            int numberToFind = target - nums[i];
            
            if(hash.find(numberToFind) != hash.end()){
                result.push_back(hash[numberToFind]);
                result.push_back(i);
                return result;
            }
            hash[nums[i]] = i;
        }
        return result;
    }
};
//Runtime: 8 ms, faster than 78.45%

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        if(nums.empty()) return {};
        
        vector<pair<int,int>> array;
        for(int i = 0;i < nums.size();++i){
            pair<int,int> temp(nums[i],i);
            array.push_back(temp);
        }
        sort(array.begin(),array.end());
        
        int i = 0,j = array.size() - 1;
        while(i < j){
            if(array[i].first + array[j].first == target)
                return {array[i].second,array[j].second};
            else if(array[i].first + array[j].first < target)
                i++;
            else if (array[i].first + array[j].first > target)
                j--;
        }
        return {};
    }
};

以上是关于c_cpp 1.两个总和的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 1.两个总和 - 难度容易 - 2018.9.18

c_cpp 检查数组中是否存在两个元素,其总和等于数组其余部分的总和

c_cpp 最大总和使得没有两个元素相邻

c_cpp 总和最接近零的两个数字

c_cpp 从正整数数组中找出子序列的最大总和,其中任意两个子序列彼此不相邻i

c_cpp 112.路径总和