Javascript 返回了预期输出,但仍然错误?

Javascript 返回了预期输出,但仍然错误?,javascript,arrays,Javascript,Arrays,假设我正在努力解决这个问题: 我写了这段代码: 功能中断记录(arr){ 设n=arr.length; 设best=0; 设最差值为100000000;//10^8(约束:。无法再高) 设rec1=0;//次最佳 设rec2=0;//最坏次数 for(设i=0;i最佳){ 最佳=arr[i]; 如果(i!=0){ rec1++; } }否则如果(arr[i]

假设我正在努力解决这个问题:

我写了这段代码:

功能中断记录(arr){
设n=arr.length;
设best=0;
设最差值为100000000;//10^8(约束:。无法再高)
设rec1=0;//次最佳
设rec2=0;//最坏次数
for(设i=0;i最佳){
最佳=arr[i];
如果(i!=0){
rec1++;
}
}否则如果(arr[i]<最差){
如果(i!=0){
最差=arr[i];
rec2++;
}
}
}
返回[rec2,rec1];
}
//对于一个测试用例,我说:

log(breakingRecords([3,4,21,36,10,28,35,5,24,42]))
实际上,您的代码是错误的。预期结果为
4 0
,但您的代码返回
4 2

这是因为第一次迭代。第一场比赛的结果是目前最好的和最差的,但不计入分数。您的代码仅将其设置为最佳分数(因为
else if
),而不是最差分数

因此,让我们将其视为一种特殊情况,并将
shift
从数组中移出的第一个元素(我们可以安全地这样做,因为约束条件列出数组必须至少包含1个元素):

功能中断记录(arr){
让最好的;
让最坏的;
best=best=arr.shift()//获取并删除第一个元素
设n=arr.length;
让recBest=0;//在此处使用更多描述性名称
让recbest=0;//……这里也是
for(设i=0;i最佳){
最佳=arr[i];
recBest++;
}否则如果(arr[i]<最差){
最差=arr[i];
REC++;
}
}
返回[recBest,recBest];
}
//对于一个测试用例,我说:

log(breakingRecords([3,4,21,36,10,28,35,5,24,42])/[4,0]
您需要将值初始化为第一个分数以进行比较

功能中断记录(arr){
设n=arr.length;
设best=0;
设最差值为100000000;//10^8(约束:。无法再高)
设rec1=0;//次最佳
设rec2=0;//最坏次数
最差=最佳=arr[0];//将最差和最佳初始化为第一个分数
for(设i=0;i最佳){
如果(i!=0){
最佳=arr[i];
rec1++;
}
}否则如果(arr[i]<最差){
如果(i!=0){
最差=arr[i];
rec2++;
}
}
}
return[rec1,rec2];//记录的顺序也错误吗?
}
//对于一个测试用例,我说:

log(breakingRecords([3,4,21,36,10,28,35,5,24,42]))
根据站点,预期输出是40,而不是42。我明白了。您可能应该将其更改为“此代码有什么问题?”或其他什么您只需要初始化值
best=best=bast=arr[0]
,因为您必须与第一个分数进行比较。记录的顺序不同,因为我混淆了2、4和4、2。谢谢,解释很简单。这是现在的投票结果。