双指针算法解决 两数之和

两数之和解决

在这里插入图片描述

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]

猜你喜欢

转载自blog.csdn.net/Pang_ling/article/details/132847718
今日推荐