📅  最后修改于: 2023-12-03 15:27:11.136000             🧑  作者: Mango
当我们在排序一个数组时,常常需要找到数组中某个数的天花板,即大于或等于该数的最小值。这是一个经常被使用的操作,特别是在二分查找中。
下面是一个使用 Java 语言实现的找到数组中天花板的程序。
public static int ceil(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
int ceil = Integer.MAX_VALUE;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] >= target) {
ceil = Math.min(ceil, nums[mid]);
right = mid - 1;
} else {
left = mid + 1;
}
}
return ceil == Integer.MAX_VALUE ? -1 : ceil;
}
ceil(int[] nums, int target)
方法接收一个升序排列的整型数组 nums
和一个目标数 target
。返回一个整数值,即数组中大于或等于 target
的最小值,如果数组中没有大于或等于 target
的最小值,则返回 -1
。ceil
变量记录当前最小的大于或等于 target
的数,这个变量的初值设置为一个足够大的值,这样在查找过程中,每找到一个大于或等于 target
的数,就会去更新 ceil
的值,直到查找完整个数组。target
时,我们只需要在数组右侧继续查找,因为当前数值肯定不是大于或等于 target
的数。由上面的介绍可知,这个程序采用了二分查找的算法进行实现,在一次查找中会将查找范围缩小一半,因此时间复杂度为 $O(logn)$,其中 $n$ 为数组长度。
这个程序虽然短小精悍,但是功能非常实用,经常被用于排序算法和查找算法中。希望这篇介绍能够对您有所帮助!