使用javascript进行二进制搜索
问题描述:
我将C++代码转换为javascript,即here。代码的其余部分看起来不错,但以下功能有问题。首先,while循环内部的第二行抛出错误Uncaught ReferenceError: Invalid left-hand side in assignment
。当我将其更改为m = (A[m] >= key ? r : l);
时,此循环变得无限。 如何在JavaScript中解决它?使用javascript进行二进制搜索
function CeilIndex(A, l, r, key) {
var m;
while(r - l > 1) {
m = l + (r - l)/2;
(A[m] >= key ? r : l) = m; // ternary expression returns an l-value
}
return r;
}
答
if (A[m] >= key) {
r = m;
} else {
l = m;
}
JavaScript不能有除了性能(即你可以做obj[A[m] >= key ? 'r' : 'l'] = m
,但你提出不算什么)可变左值。
答
你只需要适当地打破你的左侧。我不知道你想要做什么,但假设你分配m
要么r
或l
:
if (A[m] >= key) {
r = m;
} else {
l = m;
}
答
在JavaScript中,你可以这样做,而不是:
A[m] >= key ? r = m : l = m;