JavaScript 新手在这里。我在练习的解决方案中遇到了以下代码。我不确定它在做什么:
var noStepBack = sequence[i-1] && sequence[i-1] >= sequence[i+1];
var noStepFoward = sequence[i+2] && sequence[i] >= sequence[i+2];
看起来它是在声明变量并初始化它们,但是赋值运算符右边的代码是一个条件语句。如果条件语句解析为假,这是否只是分配“0”,如果它们解析为真,则分配“1”?
更多的上下文,这是来自 CodeSignal 网站的练习 aboutIncreasingSequence。练习说明及完整解法如下:
给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。
注意:如果 a0 < a1 < ... < an,则序列 a0, a1, ..., an 被认为是严格递增的。仅包含一个元素的序列也被认为是严格递增的。
例子
对于 sequence = [1, 3, 2, 1],输出应该是几乎IncreasingSequence(sequence) = false。
这个数组中没有一个元素可以被删除以获得严格递增的序列。
对于 sequence = [1, 3, 2],输出应该是几乎IncreasingSequence(sequence) = true。
您可以从数组中删除 3 以获得严格递增的序列 [1, 2]。或者,您可以删除 2 以获得严格递增的序列 [1, 3]。
function almostIncreasingSequence(sequence) {
if(sequence.length == 2) return true;
var error = 0;
for(var i = 0; i < sequence.length - 1; i++){
// if current value is greater than next value
if(sequence[i] >= sequence[i+1]){
// Test whether stepping back or forwards can bridge the hump or pothole
var noStepBack = sequence[i-1] && sequence[i-1] >= sequence[i+1];
var noStepFoward = sequence[i+2] && sequence[i] >= sequence[i+2];
// We only test for bridge gaps when i > 0
if(i > 0 && noStepBack && noStepFoward) {
// Cannot step back over gap forwards or backwards
// Counts as two errors ONLY WHEN BOTH PRESENT
error+=2;
}else{
// Typical error
error++;
}
}
// Early dropout cause if you ever get more than one error, then its game over anyway
if(error > 1) return false;
}
return true;
}