javascript - 返回预期的输出但仍然错误?
问题描述
假设我正在尝试解决这个问题:
https://www.hackerrank.com/challenges/break-best-and-worst-records/problem
我写了这段代码:
function breakingRecords(arr) {
let n = arr.length;
let best = 0;
let worst = 100000000; // 10^8 (constraints :. cannot get higher)
let rec1 = 0; // times broken best
let rec2 = 0; // times broken worst
for (let i = 0; i < n; i++) {
if (arr[i] > best) {
best = arr[i];
if (i != 0) {
rec1++;
}
} else if (arr[i] < worst) {
if (i != 0) {
worst = arr[i];
rec2++;
}
}
}
return [rec2, rec1];
}
//And for one test case, I say:
console.log(breakingRecords([3, 4, 21, 36, 10, 28, 35, 5, 24, 42]))
输出为[4, 2]
,等于预期输出(预期输出为4 2
,但它们自己添加了空格)。但是,当我输入此代码时,我的输出显示为4 0
. 我在浏览器中测试它,我仍然得到[4, 2]
.
有人可以解释为什么会这样,我能做些什么来解决它?刷新不起作用,关闭和重新打开也不起作用。
解决方案
实际上,您的代码是错误的。预期的结果是4 0
,但您的代码返回4 2
。
那是因为第一次迭代。第一场比赛的结果是当前最好和最差的,但不计入分数。您的代码仅将其设置为最好的分数(因为else if
),而不是最差的。
因此,让我们将其视为一种特殊情况,以及shift
数组中的第一个元素(我们可以安全地做到这一点,作为数组必须包含至少一个元素的约束列表):
function breakingRecords(arr) {
let best;
let worst;
best = worst = arr.shift() //Get and remove the first element
let n = arr.length;
let recBest = 0; //Use more descriptive names here
let recWorst = 0; //...and here as well
for (let i = 0; i < n; i++) {
if (arr[i] > best) {
best = arr[i];
recBest++;
} else if (arr[i] < worst) {
worst = arr[i];
recWorst++;
}
}
return [recBest, recWorst];
}
//And for one test case, I say:
console.log(breakingRecords([3, 4, 21, 36, 10, 28, 35, 5, 24, 42])) //[4, 0]
推荐阅读
- node.js - 创建新元素时,我的 foreignKey 始终为空。续集,节点,Postgresql
- java - 未找到 jasper 中的 java.awt.image 归档类
- python - 如果值在任何列之前,则删除行
- android - 如何使用 ReentrantLock 或 Mutex 正确锁定线程?
- angular - 为什么在将 Angular Spring war 文件部署到 Apache Tomcat 时出现空白页
- android - JobIntentService 作业 ID 是全局唯一的还是由类限定?
- postgresql - 无法在命令行上运行 psql...在 macOS Mojave 上安装了 PostgreSQL.app
- c# - 通过 C# 调用 powershell 脚本并将输出捕获到 ASP
- javascript - 尝试创建一个将更改字体系列的按钮
- odata - 在 .Net Core 3.1 OData EDMModelBuilder 中公开私有设置器