算法提高之LeetCode刷题数据结构和算法分析

LeetCode 1. 两数之和

2018-12-03  本文已影响3人  SmallRookie

题目描述

题解

暴力法

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;
    }
};

时间复杂度为O(n^2),空间复杂度为O(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;
    }
    
};

时间复杂度为O(n),空间复杂度为O(n)

哈希表法进阶

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;
    }
    
};

时间复杂度为O(n),空间复杂度为O(n)

上一篇 下一篇

猜你喜欢

热点阅读