题目:
有一个已经排好序的整数序列(升序,无重复项),序列中可能有正整数、负整数或者0,请用你认为最优的方法求序列中绝对值最小的数
思路:
- 分为三种情况:
- 所有整数不大于0
- 所有整数不小于0
- 正负整数都存在
- 使用二分查找,一直逼近0,然后比较0两边的数
代码:
def binary_search(li):
if li[0] >= 0:
return li[0]
elif li[-1] <= 0:
return li[-1]
else:
left, right = 0, len(li)-1
while left < right:
mid = (left + right) // 2
if li[mid] <= 0 and li[mid+1] > 0:
if abs(li[mid]) < abs(li[mid+1]):
return li[mid]
else:
return li[mid-1]
elif li[mid] > 0:
right = mid - 1
elif li[mid] < 0:
left = mid + 1
li = [-17,-12,18,-3,-1,0,2,5,6,7]
print(li)
a = binary_search(li)
print(a)