1.二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
方法一:二分法
#方法一:二分法
def search(nums,target):
left,right=0,len(nums)-1
while left<=right:
mid=(left+right)//2
if nums[mid]>target:
right=mid-1
elif nums[mid]<target:
left=mid + 1
else:
return mid #找到了
return -1 #没有找到
2.寻找比目标字母大的最小字母
给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。
返回 letters 中大于 target 的最小的字符。如果不存在这样的字符,则返回 letters 的第一个字符。
方法一:二分查找
#方法一:二分查找
def nextGreatestLetter(letters,target):
left,right=0,len(letters) -1
if target>=letters[-1]: #没有找到
return letters[0]
while left<=right:
mid=(left+right)//2
if letters[mid]>target:
right=mid-1
elif letters[mid] <= target:
left=mid + 1
return letters[left]
3.公平的糖果交换
爱丽丝和鲍勃拥有不同总数量的糖果。给你两个数组 aliceSizes 和 bobSizes ,aliceSizes[i] 是爱丽丝拥有的第 i 盒糖果中的糖果数量,bobSizes[j] 是鲍勃拥有的第 j 盒糖果中的糖果数量。
两人想要互相交换一盒糖果,这样在交换之后,他们就可以拥有相同总数量的糖果。一个人拥有的糖果总数量是他们每盒糖果数量的总和。
返回一个整数数组 answer,其中 answer[0] 是爱丽丝必须交换的糖果盒中的糖果的数目,answer[1] 是鲍勃必须交换的糖果盒中的糖果的数目。如果存在多个答案,你可以返回其中 任何一个 。题目测试用例保证存在与输入对应的答案。
方法一:求和+遍历
#方法一:求和+遍历
def fairCandySwap(aliceSizes,bobSizes):
s1=sum(aliceSizes)
s2=sum(bobSizes)
target=(s2-s1)//2 #交换两个数之差
for i in aliceSizes:
if (i+target) in bobSizes:
return [i,i + target] #找到了