【LeetCode】1,两数之和。 难度等级:简单。知识点:使用哈希表代替for循环进行查找。

一、题目

在这里插入图片描述

二、低级解法:双重for循环暴力枚举

code:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        for i in range(n):
            for j in range(i + 1, n):
                if nums[i] + nums[j] == target:
                    return [i, j]
        return []

双重for循环暴力枚举的时间复杂度为 O(n2)。

三、进阶解法:哈希表

思路:

在这里插入图片描述
code (C++):

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

code (Python3):

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashmap={
    
    }   # 以 nums[i]为key,i为value
        length=len(nums)
        for i in range(length):
        	# Python语法是:if key in dict
            if target-nums[i] in hashmap:
                return [i,hashmap[target-nums[i]]]
            else:
                hashmap[nums[i]]=i
        return []

知识点:使用哈希表查找的时间复杂度是 O(1),而使用for循环进行查找的时间复杂度是 O(n)

猜你喜欢

转载自blog.csdn.net/qq_43799400/article/details/131035430
今日推荐