HackerRank sockMerchant题JS排序计数解法输出错误如何排查修复
问题排查与修复
错误原因
你的代码仅在遍历遇到不同颜色时,才将上一个颜色的可配对数计入总对数,遍历结束后最后一组相同颜色的计数没有被统计,直接导致结果偏小。
拿你给出的测试用例举例:
输入数组排序后为 [1,1,1,1,2,3,3,3,3,3],遍历过程如下:
- 遇到颜色2时,统计前一个颜色1的数量4,得到2对计入总对数
- 遇到颜色3时,统计前一个颜色2的数量1,得到0对计入总对数
- 遍历到最后一个元素3时,counter累计到5,但循环直接结束,这部分的
Math.floor(5/2)=2对没有计入总对数,最终只返回2,和正确结果差了2。
修复方案
只需要在循环结束后,额外加上最后一组颜色的可配对数即可。
修复后的代码:
function sockMerchant(n, ar) { // Write your code here let pairs=0; let counter; ar.sort() for(let i=0; i < n; i++){ if (i == 0){ counter = 1; }else{ if(ar[i] == ar[i-1]){ counter++; }else{ pairs += Math.floor(counter/2); counter= 1; } } } // 新增:统计最后一组颜色的配对数 pairs += Math.floor(counter/2); return pairs }
修复后测试用例的计算结果为2+0+2=4,和预期结果一致。
内容的提问来源于stack exchange,提问作者Jenifer
相关产品推荐
相关产品推荐

