太菜了,第一题提交了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]
原文:https://www.cnblogs.com/Lzqayx/p/12121814.html