📅  最后修改于: 2023-12-03 15:40:53.981000             🧑  作者: Mango
这个 C++ 程序用于对一个升序数组中的天花板进行查找。天花板指的是数组中大于等于给定值的最小值。
例如,对于数组 [2, 3, 5, 8, 13, 18],给定值为 10,该程序将返回 13,因为它是大于等于 10 的最小值。
这个程序的时间复杂度是 O(log n),其中 n 是数组的长度。
这个程序使用了二分查找的思想来查找天花板。
具体来说,算法维护两个指针 left 和 right,它们指向当前查找范围的左右边界。
初始时,left 指向数组的第一个元素,right 指向数组的最后一个元素。
接着,程序用中间元素 mid 更新 left 和 right 的值。如果 mid 大于等于给定值,说明天花板在 mid 左边或者就是 mid 本身,程序将 right 更新为 mid。如果 mid 小于给定值,说明天花板在 mid 右边,程序将 left 更新为 mid+1。
不断重复上面的过程,直到 left 和 right 相遇或者交错。这时,left 或者 right 指向的元素即为天花板。
以下是程序的代码片段:
int findCeiling(int arr[], int n, int target) {
if (arr[n-1] < target) return -1; // 天花板比数组最大值还要大
int left = 0, right = n-1, mid;
while (left < right) {
mid = left + (right - left)/2;
if (arr[mid] < target) left = mid + 1;
else right = mid;
}
return arr[left];
}
使用这个程序非常简单。假设你已经有一个升序数组 arr 和一个要查找的天花板 target。
你只需要调用函数 findCeiling 来查找即可:
int ceiling = findCeiling(arr, n, target);
其中,n 是数组 arr 的长度。
如果天花板存在,程序将返回它的值;否则,程序将返回 -1。