对于这个特定的HackerRank问题,我需要非常具体的答案:https://www.hackerrank.com/challenges/plus-minus/problem。
为什么这段代码通过所有测试用例?
function plusMinus(arr) {
let positives = 0
let negatives = 0
let zeros = 0
const length=arr.length
for (var i = 0; i < arr.length;i++){
if (arr[i] > 0) {
positives++
} else if (arr[i] < 0) {
negatives++
} else {
zeros ++
}
}
const positiveRatio = Number(positives / length).toFixed(6)
const negativeRatio = Number(negatives / length).toFixed(6)
const zeroRatio = Number(zeros / length).toFixed(6)
console.log(positiveRatio)
console.log(negativeRatio)
console.log(zeroRatio)
}
为什么此代码未通过任何测试用例? (我已经编辑了我的代码:对不起,以前的错误代码)此代码也不起作用。
function plusMinus(arr) {
var l = arr.length;
var positiveCounter = 0;
var negativeCounter = 0;
var zeroCounter = 0;
for(var i=0; i<=l; i++) {
if (arr[i]>0) {
positiveCounter+=1;
} else if (arr[i]<0) {
negativeCounter+=1;
} else {
zeroCounter+=1;
}
}
console.log (
(positiveCounter/l).toFixed(6)+ '\n' +(negativeCounter/l).toFixed(6)+ '\n' +(zeroCounter/l).toFixed(6) );
}
我不想要替代方法来解决这个问题。我只想知道为什么第一个代码有效而第二个代码无效???
答案 0 :(得分:2)
这两个代码不同,您将数字除以长度两次
var p= ...
)(p/l).toFixed(6)
)另外,就像@DhananjaiPai提到的那样,它们有多个console.log
,而您只有一个带有破碎字符的字符,这些字符可以由OS(\r\n
或\n
)来解释
您的循环中也有问题,我将让您找到一个错误,但请记住,一个数组从索引0开始,如果该数组具有3个元素,则将为[0, 1, 2]