两数之和解决
class Solution:
#双指针解决两数之和,先进行排序,构建新的数组,元素为元组形式,记录原来数字和其位置,再进行双指针算法,和大于target,右指针向左移动,和小于target,左指针向右移动
def twoSum(self, nums: List[int], target: int) -> List[int]:
numbers=[
(number,index)
for index,number in enumerate(nums)
]
numbers.sort()
left,right=0,len(nums)-1
while left < right:
if numbers[left][0]+numbers[right][0] > target:
right-=1
elif numbers[left][0]+numbers[right][0] < target:
left+=1
else:
return sorted([numbers[left][1],numbers[right][1]])
return [-1,-1]
使用双指针方法时候,需要先经过排序,这里取遍原来数组的里面所有元素,然后记录下值和元素所在位置
哈希表解决两数之和
class Solution:
#哈希表解决两数之和问题,创建一个哈希表,往哈希表中添加新键值对{number,i}的时候,先检查哈希表中键是否有target-number,如果有,返回对应哈希表中target-number的值和i。没有的话将其加入到哈希表中
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable=dict()
#i是元素位置,number是元素值
for i,number in enumerate(nums):
if target-number in hashtable:
return [hashtable[target-number],i]
hashtable[nums[i]]=i
return [-1,-1]