1题目:
2解法
2.1暴力求解,两层循环
缺点:超时 时间复杂度O(n2) 空间复杂度O(1)
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)-1):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
n = [i,j] //列表
break
return n
2.2改成一层循环
时间复杂度:O(n^2),空间复杂度O(1)
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for left_index in range(len(nums)):
right = target - nums[left_index]
if right in nums[left_index+1:]:
nums_right = nums[left_index+1:]
right_index = nums_right.index(right) + left_index + 1取right值的索引
m([left_index,right_index]
break
return answer
2.3使用dict字典
空间换时间
时间复杂度:O(n),空间复杂度O(n)
将列表转化为字典
class Solution:
def twoSum(self, nums:List[int], target:int) -> List[int]:
re_nums_dict = {}
for nums_key, nums_value in enumerate(nums): //借助enumerate构造字典
re_nums_dict[nums_value] = nums_key
for left_index, left in enumerate(nums):
right_index = re_nums_dict.get(target-left)
if right_index != left_index and right_index is not None:
break
return [left_index, right_index]
将列表索引看成值 列表的值看成键