如何解决为什么OR||语句在while循环中不起作用,javascript
我写了一个程序来解决任务,但是没有按预期工作,所以我开始调试。并注意到我的while循环中存在问题。因此,我完全注释了代码块(您可以完全忽略注释部分),并递增leftPointer
和rightPointer
只是为了测试我的while循环是否正确停止,但实际上并没有,我也不知道为什么。这个想法是让循环运行,直到i-leftPointer
和i+rightPointer
这两个语句都为假。如果其中之一为假,则仍然运行。正如您在控制台中看到的那样,第一个语句为true,第二个语句为false,但它不会进入while循环。有什么问题吗?
var maxSubArray = function(nums) {
let curSum = 0;
let maxSum = 0;
for(let i = 0; i <= nums.length; i++)
{
curSum = maxIndex(nums,i);
if(curSum > maxSum) maxSum = curSum;
}
return maxSum;
};
function maxIndex(nums,i){
console.log('New number -------------------------',i)
let curSum = nums[i];
let maxSum = nums[i];
let leftPointer = 1;
let rightPointer = 0;
let leftTurn = true;
let rightTurn = false;
console.log((i - leftPointer > 0),(i + rightPointer) < nums.length)
while(((i - leftPointer) > 0) || ((i + rightPointer) < nums.lenght))
{
/* if(i - leftPointer > 0 && leftTurn === true){
curSum += nums[i - leftPointer];
--leftPointer;
}
if(i + rightPointer > 0 && rightTurn === true){
curSum += nums[i - rightPointer];
++rightPointer;
}
if(curSum > maxSum)
maxSum = curSum;
leftTurn = !leftTurn;
rightTurn = !rightTurn */
++leftPointer;
++rightPointer;
console.log('leftPointer ' + (i - leftPointer))
console.log('rightPointer ' + (i + rightPointer))
}
return maxSum;
}
Console log
New number ------------------------- 0
false true
New number ------------------------- 1
false true
New number ------------------------- 2
true true
leftPointer 0
rightPointer 3
New number ------------------------- 3
true true
如果需要,这里的PS是对casee中任务的描述 给定一个整数数组nums,找到具有最大总和的连续子数组(至少包含一个数字)并返回其总和。
示例:
输入:[-2,1,-3,4,-1,2,1,-5,4], 输出6 说明:[4,-1,1]的总和= 6。
解决方法
您似乎拼错了length
。
更改
while(((i - leftPointer) > 0) || ((i + rightPointer) < nums.lenght))
到
while(((i - leftPointer) > 0) || ((i + rightPointer) < nums.length))
看看是否可行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。