给定一个长度为 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 }