Version 1
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
remain = target - nums[i]
if remain in nums:
if nums.index(remain) != i:
return [i, nums.index(remain)]
return []
自己最开始的想法,前两个实例都能运行出来,第三个出现了问题。
时间复杂度O(N^2),空间复杂度O(1)。
Version 2 暴力枚举
官方给出的答案,解决了V1的问题。
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 []
优点:每个元素和前面的元素已经加和计算过了,只需要和后面的进行加和计算即可,这样能避免一个元素使用两次。
Version 3 哈希表
官方给出的答案。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable = dict()
for i, num in enumerate(nums):
if target - num in hashtable:
return [hashtable[target - num], i]
hashtable[nums[i]] = i
return []
Version 4
自己改进V1
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
n = len(nums)
for i in range(n):
remain = target - nums[i]
if remain in nums[i+1:n]:
return [i, nums.index(remain)]
return []
错误答案——修改未知