findN
#寻找某个数在递增序列里, 找不到返回-1
def findN(nums,n):
i = 0
j = len(nums) - 1
while i<=j:
middle = i + (j - i)//2
if nums[middle]==n:
#return True
return middle
if nums[middle]>n:
j = middle - 1
else:
i = middle + 1
return -1 # False
findL
#寻找右序列的左边界,即大于等于它的所有元素,最靠左的
def findL(nums,n):
i = 0
j = len(nums) - 1
temp = j+1 # 如果有右序列为空,则返回最大下标+1 【如果左序列为空,则返回最小下标 初始化temp = 0】
while i<=j:
middle = i + (j - i)//2
if nums[middle]>=n: #找哪个序列的边界值,则判断条件为该序列的性质
temp = middle
j = middle - 1
else:
i = middle + 1
return temp # False
findR
#寻找左序列的右边界,即小于等于它的所有元素,最靠右的
def findR(nums,n):
i = 0
j = len(nums) - 1
temp = -1 # 如果有右序列为空,则返回最大下标+1 【如果左序列为空,则返回最小下标 初始化temp = 0】
while i<=j:
middle = i + (j - i)//2
if nums[middle]<=n: #找哪个序列的边界值,则判断条件为该序列的性质
temp = middle
i = middle + 1
else:
j = middle - 1
return temp # False