javascript - 将 c++ 代码转换为 javascript 但返回错误结果

标签 javascript

已将 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/

相关文章:

javascript - 叠加两个 AmCharts

javascript - Document.execCommand 不更新当前事件元素

javascript - 即时编辑 Facebook Like-Box Css?

javascript - 无法使用 NodeJS 将结果打印到我的控制台

javascript - 使用 AJAX 按自定义分类术语过滤 WordPress 帖子

javascript - 使用带标志的 javascript filter()

javascript - 特定元素上的忙碌指示器(Wicket)

javascript - 如何使用不同的 Controller 更新 Ember.js 中的 hasMany?

javascript - 在 JavaScript 中使用重复的第一个子元素检索嵌套 id

javascript - 如何通过javascript为标签赋值?