求解Breaking Record问题时代码联合运行异常,单独函数正常
Breaking Record代码异常问题分析
输入分数数组[10, 5, 20, 20, 4, 5, 2, 25, 1],预期输出为[2, 4](2是打破最高纪录次数,4是打破最低纪录次数),但整体程序执行异常,单独运行HP和LP函数可得到预期结果,问题出在以下几点:
核心问题点
- 原数组被意外修改:
const array = scores;是引用赋值,HP函数中使用splice修改了数组b(本质是修改原数组),导致LP函数处理的不是原始分数数组,而是HP处理后的残缺数组,计算逻辑完全失效。 - 共享变量污染:
count、temp、temp1等变量是外层函数的共享变量,HP运行时会修改这些变量的值,当LP函数运行时,会继承这些被修改后的变量状态,而非使用原始初始值,引发逻辑错乱。 - HP函数逻辑冗余且错误:通过
splice删除元素、去重的操作完全没必要,统计破纪录次数只需要遍历数组,每次比较当前值与当前最大/最小值,更新计数即可,删除元素反而破坏了原始数据。
修正后的代码
var scores = [10, 5, 20, 20, 4, 5, 2, 25, 1]; function breakingRecords(scores) { let maxCount = 0; let minCount = 0; let currentMax = scores[0]; let currentMin = scores[0]; for (let i = 1; i < scores.length; i++) { if (scores[i] > currentMax) { currentMax = scores[i]; maxCount++; } else if (scores[i] < currentMin) { currentMin = scores[i]; minCount++; } } return [maxCount, minCount]; } const ans = breakingRecords(scores); console.log(ans); // 输出 [2, 4]
内容的提问来源于stack exchange,提问作者Akashraj
相关产品推荐
相关产品推荐

