leetcodde(1)-两数之和

太菜了,第一题提交了6次才过。

题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

思路:
数组带下标排序,二分查找

class Solution:
    def findtarget(self,head,target): # 二分查找
        tail = self.length-1
        while head<=tail:
            mid = (head+tail)//2
            if self.list_target[mid][0]<target:
                head = mid+1
            elif self.list_target[mid][0]>target:
                tail = mid-1
            elif self.list_target[mid][0]==target:
                return self.list_target[mid][1] 
        return -1
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        self.length = len(nums)
        list_target = [(nums[i],i) for i in range(self.length)]
        self.list_target = sorted(list_target,key=lambda x: x[0])
        for i in range(self.length-1): # 截止到tail的前一个
                index = self.findtarget(i+1,target-self.list_target[i][0]) # 从下一个开始找
                if index>=0: # 下标大于等于0,写成大于,错了一次
                    return [self.list_target[i][1],index]
        

posted @ 2019-12-30 21:25  木子士心王大可  阅读(102)  评论(0)    收藏  举报