一、题目描述
二、尝试1
from typing import List
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_dict = {}
for i in range(len(nums)):
diff = target - nums[i]
if diff in num_dict:
return [num_dict[diff], i]
num_dict[nums[i]] = i
return []
三、尝试2
from typing import List
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_dict = {}
for i, num in enumerate(nums):
diff = target - num
if diff in num_dict:
return [num_dict[diff], i]
num_dict[num] = i
return []
四、尝试3
from typing import List
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
nums_sorted = sorted(enumerate(nums), key=lambda x: x[1])
left, right = 0, len(nums) - 1
while left < right:
curr_sum = nums_sorted[left][1] + nums_sorted[right][1]
if curr_sum == target:
return [nums_sorted[left][0], nums_sorted[right][0]]
if curr_sum < target:
left += 1
else:
right -= 1
return []
五、尝试4
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
records = dict()
# 用枚举更方便,就不需要通过索引再去取当前位置的值
for idx, val in enumerate(nums):
if target - val not in records:
records[val] = idx
else:
return [records[target - val], idx]