javascript中使用splice的Sock Merchant问题不起作用

javascript中使用splice的Sock Merchant问题不起作用,javascript,Javascript,我下面的解决方案对9个测试用例中的6个测试用例有效,我无法理解为什么它对下面的测试用例无效。注意:我使用了拼接而不是排序优先的方法。提前谢谢 问题是: 功能(n,ar){ 变量i=0,j=1; var计数=0; while(i1){ if(ar[i]==ar[j]){ ar.接头(i,1); ar.接头(j,1); 计数++; i=0; j=i+1; } 否则{ 如果(j>=ar.length-1){ i++; j=i+1; }否则{ j++; } } } 返回计数; } 成功的测试用例:

我下面的解决方案对9个测试用例中的6个测试用例有效,我无法理解为什么它对下面的测试用例无效。注意:我使用了拼接而不是排序优先的方法。提前谢谢

问题是:

功能(n,ar){
变量i=0,j=1;
var计数=0;
while(i1){
if(ar[i]==ar[j]){
ar.接头(i,1);
ar.接头(j,1);
计数++;
i=0;
j=i+1;
}
否则{
如果(j>=ar.length-1){
i++;
j=i+1;
}否则{
j++;
}
}
}
返回计数;
}
成功的测试用例: 102020010030501020

产出:3

失败的测试用例: 4555664143663636161455


输出(预期):9

由于索引“j”总是大于索引“i”,因此不应首先拼接“i”。删除较低的元素将偏移以下所有数组元素的索引

尝试改变

ar.拼接(i,1);

ar.接头(j,1)问题陈述是什么?这个函数应该做什么?我已经添加了问题的链接。谢谢
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;
}