输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。
const readline = require('readline') const rl = readline.createInterface({ input: process.stdin, ouput: process.stdout }) let inArr = [] let n rl.on('line',line=>{ if(!line) return inArr.push(line.trim()) n = +inArr[0] if(inArr.length === n+1){ let arr = [] for (let i = 0; i < n; i++) { arr[i] = +inArr[i+1] } console.log(maxsum(arr)) } }) function maxsum(arr) { if(arr.length === 1){ return arr[0] } let max = 0, temp = 0 for (let i = 0; i < arr.length; i++) { temp += arr[i] max = Math.max(temp,max) if(temp<0){ temp = 0 } } return max }
var N = parseInt(readline()); var currNum = parseInt(readline()), tempSum = currNum, subArrSum = currNum; for(var i=1; i<N; i++){ currNum = parseInt(readline()), tempSum += currNum; tempSum = tempSum > currNum? tempSum: currNum; subArrSum = Math.max(subArrSum,tempSum); } print(subArrSum);