Java firstPosition算法
|
int firstPosition(int x, int [] a) {
int lower = 0;
int upper = a.length;
while (lower != upper) {
int mid = (lower + upper) / 2;
**if (x <= a[mid]) {** // the line I don\'t understand
upper = mid;
} else {
lower = mid + 1;
}
return (lower);
}
如果a = {4、4、5、5、6、7、8、9、9、9},那么对于以下x选择,算法将返回什么?
i)x = 3
ii)x = 4
iii)x = 5
iv)x = 9
v)x = 11
我尝试逐步执行此程序,例如x = 3,a.length返回10,因此upper始终等于10。
while ( 3 ! = 0 ) { // execute line
int mid = lower + upper / 2 - which is (0 + 10)/2 = 5
if ( x <= a[mid]) // I assume that means if 3 is less than or equal to 5? 5 then replace mid with 5 and then...
lower = mid + 1 // 5+1 = 6, return 6 as lower?
没有找到相关结果
已邀请:
3 个回复
烫珊
(搜索值)是否可能位于数组的下半部或上半部。这是可行的,因为对数组进行了排序。我们可以将任何排序后的数组分为两半,然后查看中间的值以确定所寻找值的一半。 说数组看起来像这样:
并且我们试图找出数字
位于哪个插槽中。由于对数组进行了排序,因此我们可以立即丢弃该数组的一半。 怎么样? 看一下数组“中心”中的值:它是
,而
大于
,因此我们知道
必须在数组的上半部分。从算法上讲,这就是代码中
语句的
情况。 因此,我们重复相同的过程,但是这次仅查看数组的上半部分:
捻盒愧杯
冲汉