首页 > 试题广场 >

连续子数组最大和

[编程题]连续子数组最大和
  • 热度指数:27250 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 的数组,数组中的数为整数。
请你选择一个非空连续子数组,使该子数组所有数之和尽可能大,子数组最小长度为1。求这个最大值。

输入描述:
第一行为一个正整数 ,代表数组的长度。
第二行为 个整数 a_i,用空格隔开,代表数组中的每一个数。


输出描述:
连续子数组的最大之和。
示例1

输入

8
1 -2 3 10 -4 7 2 -5

输出

18

说明

经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18       
示例2

输入

1
2

输出

2
示例3

输入

1
-10

输出

-10
如果遇到奇怪的结果,比如自测运行通过,但是保存并提交失败,大概是输入没有trim掉空格。
发表于 2024-09-23 17:07:52 回复(0)
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);
}()

发表于 2022-11-20 21:45:56 回复(0)
// 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);
})

发表于 2021-11-05 17:40:05 回复(0)