我的以下解决方案适用于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
答案 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);