【发布时间】:2021-07-27 18:36:14
【问题描述】:
我有一个大小为n 的排序数组arr[] 没有重复,并给出了一个值x。 x 的层定义为arr[] 中的最大元素K,使得K 小于或等于x。找到K(0-based indexing)的索引。
输入:
n = 7
x = 0
arr[] = {1,2,8,10,11,12,19}
输出:
1
我必须在 O(logn) 中解决它。 我下面的代码通过了测试用例,但显示超出时间限制。这段代码有什么问题?
static int findFloor(long arr[], int n, long x) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] > x) {
if (mid != 0 && arr[mid - 1] < x) {
return mid;
} else {
high = mid - 1;
}
} else if (arr[mid] < x) {
low = mid + 1;
}
}
return -1;
}
【问题讨论】:
-
n=1, x=10, arr[]={10}我认为这个(以及任何类似情况)将进入无限循环。 -
当 arr[mid] == x 时你什么都不做。所以你进入无限循环。在您的 else if 条件中,将 arr[mid]
-
但我的回答错了。
标签: java binary-search