已将 C++ 代码转换为 JavaScript,但返回的结果不正确。 C++代码是here 。下面是我的代码
function CeilIndex(A, l, r, key) {
var m;
while( r - l > 1 ) {
m = l + (r - l)/2;
if (A[m] >= key) {
r = m;
} else {
l = m;
}
}
return r;
}
function LongestIncreasingSubsequenceLength(A, size) {
var tailTable = new Array(size);
var len;
tailTable[0] = A[0];
len = 1;
for (var i = 1; i < size; i++) {
if( A[i] < tailTable[0] ) {
tailTable[0] = A[i];
} else if( A[i] > tailTable[len-1] ) {
tailTable[len++] = A[i];
} else {
tailTable[CeilIndex(tailTable, -1, len-1, A[i])] = A[i];
}
}
return tailTable;
}
var A = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];
var n = A.length;
console.log("Length of Longest Increasing Subsequence is: ", LongestIncreasingSubsequenceLength(A, n));
当我执行上面的代码时,它返回最长递增子序列的长度是:[0, 4, 2, 6, 1, 5, 3, 7, 15]
而它的答案是 [0,2,6,9,11,15]
如何解决这个问题?
最佳答案
m
在您的代码中变为 double 。所有数字在 JS 内部都表示为 double 。我猜应该被 chop 为 int ?
下面的代码似乎可以工作。
function CeilIndex(A, l, r, key) {
var m;
while( r - l > 1 ) {
m = Math.floor(l + (r - l)/2);
if (A[m] >= key) {
r = m;
} else {
l = m;
}
}
return r;
}
关于javascript - 将 c++ 代码转换为 javascript 但返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093196/