HackerRank Counting Sort 1挑战:返回频率与预期不符问题求助
HackerRank计数排序1问题排查
问题描述
给定整数列表,实现countingSort函数,返回长度为100的频率数组——数组的每个索引对应0-99的数值,索引位置的值就是该数值在输入列表中的出现次数。输入格式为:第一行是列表长度n,后续n行每行一个整数。
你运行代码后输出与预期不符,核心问题是代码逻辑完全偏离了题目要求。
你的代码
function countingSort(arr) { // Write your code here let freqArray = []; let frequency = 0; for(let i=0; i <= arr.length; i++){ if(i != 0){ freqArray.push(frequency); } frequency = 0; for(let j=0; j <= arr.length; j++){ if(arr[i] == arr[j]){ frequency++; } } } return freqArray; }
输入输出对比
测试输入
63 25 73 1 98 73 56 84 86 57 16 83 8 25 81 56 9 53 98 67 99 12 83 89 80 91 39 86 76 85 74 39 25 90 59 10 94 32 44 3 89 30 27 79 46 96 27 32 18 21 92 69 81 40 40 34 68 78 24 87 42 69 23 41 78 22 6 90 99 89 50 30 20 1 43 3 70 95 33 46 44 9 69 48 33 60 65 16 82 67 61 32 21 79 75 75 13 87 70 33
你的输出
1 3 2 2 2 2 2 1 2 1 2 2 1 3 2 2 2 1 2 2 2 1 2 3 1 1 2 2 1 1 1 2 3 2 1 1 1 3 2 2 3 2 2 2 2 1 2 3 1 2 1 3 2 2 2 1 1 2 1 2 1 3 1 1 2 1 1 2 2 3 1 2 1 2 1 2 2 1 3 2 2 2 3 1 3 1 1 2 1 2 1 3 2 2 2 2 1 2 2 3
预期输出
0 2 0 2 0 0 1 0 1 2 1 0 1 1 0 0 2 0 1 0 1 2 1 1 1 3 0 2 0 0 2 0 3 3 1 0 0 0 0 2 2 1 1 1 2 0 2 0 1 0 1 0 0 1 0 0 2 1 0 1 1 1 0 1 0 1 0 2 1 3 2 0 0 2 1 2 1 0 2 2 1 2 1 2 1 1 2 2 0 3 2 1 1 0 1 1 1 0 2 2
问题分析
你的代码逻辑完全不符合题目要求,核心错误点:
- 数组长度错误:你生成的
freqArray长度与输入数组一致,但题目要求固定返回长度为100的数组。 - 索引对应关系错误:你现在是统计输入数组中第i个元素的出现次数,然后存入
freqArray的第i-1位;但题目要求freqArray的第k位对应数值k的出现次数。 - 循环范围错误:外层循环
i <= arr.length会导致访问arr[arr.length](undefined),多统计了一次无效值。
修正后的代码
function countingSort(arr) { // 初始化长度为100的频率数组,所有元素默认0 const freqArray = new Array(100).fill(0); // 遍历输入数组,统计每个数值的出现次数 for (const num of arr) { freqArray[num]++; } return freqArray; }
逻辑说明
new Array(100).fill(0)直接创建符合要求的长度100的数组,每个位置初始化为0,对应0-99每个数值的初始出现次数。- 遍历输入数组的每个数字
num,将freqArray[num]加1,这样索引num的位置就准确记录了该数值的出现次数。 - 最终返回的数组完全满足题目要求:长度100,每个索引对应数值的出现次数。
内容的提问来源于stack exchange,提问作者mahteusodev
相关产品推荐
相关产品推荐

