1、题目:已知正序排列数组,寻找某一位数字所在的位置
2、解题思路
- 数组至少有一个元素,否则无需循环,while right>=left
- 三种场景
- 中间值=目标值,直接返回middle
- 中间值
- 中间值>目标值,目标值在左二分之一,right=middle+1
3、代码实现
def middle_search(data,val):
left = 0
right = len(data)-1
while right >= left:
middle = (left+right)//2
if data[middle] == val:
return middle
elif data[middle] > val:
right = middle-1
elif data[middle] < val:
left = middle+1
4、时间复杂度:O(logn)
5、测试用例设计
data=[1,2,3,4,5,6,7]
data1 = []
data2 = [2]
result = middle_search(data,4)
result1 = middle_search(data,2)
result2 = middle_search(data,6)
result3 = middle_search(data1,2)
result4 = middle_search(data2,2)
print('中间值=目标值:',result)
print('中间值>目标值:',result1)
print('中间值<目标值:',result2)
print('无元素:',result3)
print('仅有一个元素:',result4)
测试用例结果
中间值=目标值: 3
中间值>目标值: 1
中间值<目标值: 5
无元素: None
仅有一个元素: 0