📌  相关文章
📜  检查排序数组中是否存在数字除以 2 的幂的 ceil(1)

📅  最后修改于: 2023-12-03 15:10:53.346000             🧑  作者: Mango

检查排序数组中是否存在数字除以 2 的幂的 ceil

在一个排好序的数组中查找是否存在某个数字除以 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)。