📅  最后修改于: 2023-12-03 15:10:53.346000             🧑  作者: Mango
在一个排好序的数组中查找是否存在某个数字除以 2 的幂的 ceil,即找到大于等于该数字结果的最小的 2 的幂次方。
由于数组已经排好序,可以采用二分查找的思路进行查找。
首先,判断数组中间位置的数字是否是所要查找的数字的 2 的幂次方,如果是,则直接返回该数字。如果不是,再判断所要查找的数字是否在数组的左边或右边,分别采用递归的方式继续查找。
def find_ceil(arr, num):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == num:
return num
elif arr[mid] < num:
left = mid + 1
else:
right = mid - 1
if left >= len(arr):
return None
return arr[left]
arr = [1, 2, 4, 6, 8, 10, 12, 16, 18, 20, 22, 24, 28, 32, 36, 40]
num = 5
print(find_ceil(arr, num)) # 8
由于采用了二分查找,因此时间复杂度为 O(log n)。