【发布时间】:2022-01-11 07:00:40
【问题描述】:
public class MySearch {
public static int search(MyArray array, int value) {
int index = -1;
int start = 0, end = array.length - 1;
while(start <= end) {
int mid = (start + end) / 2;
if(array.compToValue(mid, value) == 1) end = mid - 1;
else if(array.compToValue(mid, value) == -1) start = mid + 1;
else return mid;
}
return index;
}
}
如您在屏幕截图中所见,在某些情况下,比较次数会超出。我不允许使用读取操作(get)。我可以进行的比较次数是 O(logn)。
【问题讨论】:
-
将
array.compToValue(mid, value)提取到一个变量中,在if子句中使用这个变量,而不是计算两次。 -
关于代码的注释:尽管可能,我们不应该跳过单行
if-、else-、@987654329 周围的大括号({和}) @-。 ... 身体。这可能会导致严重的错误。 -
感谢您的回答,成功了!我也会注意括号。
-
MyArray是什么?