使用接头的JavaScript中的袜子商人问题不起作用

时间:2019-11-24 07:23:41

标签: javascript

我的以下解决方案适用于9个测试用例中的6个测试用例,我无法确定为什么它不适用于以下测试用例。注意:我使用拼接代替排序优先方法。预先感谢。

问题: https://www.hackerrank.com/challenges/sock-merchant/problem

function sockMerchant(n, ar) {
    var i=0,j=1;
    var count = 0;
        while(i<=ar.length-1 && ar.length>1){

            if (ar[i]==ar[j]){
                ar.splice(i,1);
                ar.splice(j,1);
                count++;
                i=0;
                j=i+1;
            }
            else{
            if(j>=ar.length-1){
                i++;
                j=i+1;
            }else{
                j++;
            }
            }
        }
return count;
}

成功的测试用例: 10 20 20 10 10 30 50 10 20

输出:3

失败的测试用例: 4 5 5 5 6 6 4 1 4 4 3 6 6 3 6 1 4 5 5 5

输出(预期):9

1 个答案:

答案 0 :(得分:0)

由于索引'j'总是大于索引'i',因此您不应该先拼接'i'。删除下部元素将使所有后续数组元素的索引偏移。

尝试更改

ar.splice(i,1);
ar.splice(j,1);

ar.splice(j,1); // remove higher element first
ar.splice(i,1);