给定一个长度为 的数组,数组中的数为整数。
请你选择一个非空连续子数组,使该子数组所有数之和尽可能大,子数组最小长度为1。求这个最大值。
第一行为一个正整数 ,代表数组的长度。第二行为 个整数 ,用空格隔开,代表数组中的每一个数。
连续子数组的最大之和。
8 1 -2 3 10 -4 7 2 -5
18
经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18
1 2
2
1 -10
-10
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void async function () { let n=await readline(); let arr=(await readline()).split(" ").map(it=>parseInt(it)); let max=arr[0],sum=0; for(let i=0;i<arr.length;i++){ sum+=arr[i]; if(arr[i]>sum) sum=arr[i]; if(sum>max) max=sum; } console.log(max); }()
// javascript const readline = require('readline'); const read = readline.createInterface({ input: process.stdin, output: process.stdout }) let len = -1; let nums; // input nums read.question("",function(length){ len = parseInt(length) read.question("", function(numbers){ nums = numbers.trim().split(' ') nums = nums.map(n=> parseInt(n)); read.close(); }) }) function maxSubArraySum(nums){ let max = nums[0], pre = nums[0]; for(let i = 1; i < nums.length; i++){ pre = Math.max(nums[i],nums[i]+pre); max = Math.max(pre,max); } return max; } read.on('close',function(){ let max = maxSubArraySum(nums) console.log(max) process.exit(0); })