给定一个长度为 n 的数组 arr ,返回其中任意连续子数组的最大累加和
题目保证没有全为负数的数据
数据范围:
,数组中元素值
要求:时间复杂度为
,空间复杂度为
function maxsumofSubarray( arr ) {
if(!arr){return 0;}
let max = 0;
let temp = 0;
for(let i = 0 ; i<arr.length;i++){
temp +=arr[i];
if(temp<0){
temp = 0;
}
if(temp>max){
max = temp;
}
}
return max;
}
module.exports = {
maxsumofSubarray : maxsumofSubarray
};
//利用一个temp 看了一下题解,确实,如果说当前的累加值已经是负数,那就没必要记录,直接置0
//从下一个位置重新开始 function maxsumofSubarray( arr ) {
// write code here
let max = Number.MIN_VALUE
let pre = 0
for(let i = 0; i < arr.length; i++) {
pre = Math.max(arr[i], pre + arr[i])
max = Math.max(max, pre)
}
return max
}
module.exports = {
maxsumofSubarray : maxsumofSubarray
}; function maxsumofSubarray( arr ) {
let max;
let pre = arr[0];//用于保存上一个状态
max = pre;//保存最大值
for(let i =1;i<arr.length;i++){
let nows;
nows=Math.max(pre+arr[i],arr[i]);
if(nows>max){
max = nows;
}
pre = nows;
}
return max;
}
js榜都是错的,怎么通过的都?
设置一个变量max存储全局最大值,一个变量cur存储当前的和;
然后开始遍历数组:
function maxsumofSubarray( arr ) {
let max = 0, cur = 0;
for (const num of arr) {
cur += num;
if (cur < 0) cur = 0;
else if (max < cur) max = cur;
}
return max;
}
/**
* max sum of the subarray
* @param arr int整型一维数组 the array
* @return int整型
*/
function maxsumofSubarray( arr ) {
// write code here
let maxRight = 0,
maxLeft = 0,
rightEndIndex = -1;
for(let i =0 ; i< arr.length; i++) {
maxRight += arr[i];
maxLeft += arr[arr.length - i - 1];
if(maxRight < 0) {
maxRight = 0;
}
if(maxLeft < 0) {
maxLeft = 0;
rightEndIndex = arr.length - i - 1;
}
}
if(rightEndIndex !== -1) {
for(let i =arr.length - 1; i>=rightEndIndex; i--) {
maxRight -= arr[i];
}
}
return maxRight;
}
module.exports = {
maxsumofSubarray : maxsumofSubarray
}; function maxsumofSubarray( arr ) {
// write code here
let max = arr[0], l = arr.length
for(let i = 1; i < l; i++){
if(arr[i-1] > 0) arr[i] += arr[i - 1]
max = Math.max(max, arr[i])
}
return max
}