LeetCode 1. 两数之和

题目描述

《LeetCode 1. 两数之和》

题解

暴力法

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

时间复杂度为《LeetCode 1. 两数之和》,空间复杂度为《LeetCode 1. 两数之和》

哈希表法

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        map<int, int>tmp;
        for(int i = 0; i < nums.size(); i++) {
            tmp[nums[i]] = i;
        }
        for(int i = 0; i < nums.size(); i++) {
            int complement = target - nums[i];
            if((tmp.count(complement) != 0) && (tmp[complement] != i)) {
            // if((tmp.contains(complement)) && (tmp[complement] != i)) {  // C++ 20
                result.push_back(i);
                result.push_back(tmp[complement]);
                return result;
            }
        }
        
        return result;
    }
    
};

时间复杂度为《LeetCode 1. 两数之和》,空间复杂度为《LeetCode 1. 两数之和》

哈希表法进阶

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        map<int, int>tmp;
        for(int i = 0; i < nums.size(); i++) {
            int complement = target - nums[i];
            if(tmp.count(complement) != 0) {
                result.push_back(i);
                result.push_back(tmp[complement]);
                return result;
            }
            tmp[nums[i]] = i;
        }
        
        return result;
    }
    
};

时间复杂度为《LeetCode 1. 两数之和》,空间复杂度为《LeetCode 1. 两数之和》

    原文作者:SmallRookie
    原文地址: https://www.jianshu.com/p/9123ba8aca24
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞