需求:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
实现:
1.使用两次for循环
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[j]+nums[i]==target:
return i,j
提交结果:
2.只用一次循环,每次判断target-num[i]对应的值是否在num[i+1:]中
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
len_nums = len(nums)
for i in range(len_nums):
a = target - nums[i]
if a in nums[i+1:]:
a_index = nums[i + 1:].index(a)+i+1
return [i, a_index]
return []
提交结果:
或者从0到循环点这样判断,其实差不多
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
nums_len = len(nums)
for i in range(nums_len):
a = target - nums[i]
if a in nums[:i]:
return [nums.index(a), i]
return []
提交结果:
3.然后学习大佬用hash表结构的操作
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
nums_hash = {}
nums_len = len(nums)
for i in range(nums_len):
dif = target - nums[i]
if dif in nums_hash:
return [nums_hash[dif], i]
nums_hash[nums[i]] = i
return []
提交结果: