一、题目
二、低级解法:双重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)