连续子数组的最大和
每日一练中遇到的问题,测试用例已经通过,但是提交提示不成功,不知道是哪里有问题
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和
示例
我的解答思路和代码
找到的规律是:
从数组第一项开始累加,
累加的结果,比当前累加到的元素小,
说明不可能累加值为最大,
所以找到的连续子数组的元素,要从当前元素开始,
最大值也变为当前元素
// 请关闭中文输入法,用英文的字母和标点符号。
// 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
// 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
// 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
// 模版代码提供基本的输入输出框架,可按个人代码习惯修改
class Solution {
solution(n, arr) {
// TODO: 请在此编写代码
if(n==0) {
return '请输入数据'
}
if(n==1) {
return arr[0]
}
if(n !== arr.length) {
return '数据格式不正确'
}
let sum = arr[0]
let max = arr[0]
for(let i=1; i<arr.length; i++) {
sum += arr[i]
if(sum < arr[i]) {
sum = arr[i]
max = arr[i]
} else {
if(sum > max) {
max = sum
}
}
}
return max;
}
}
var str_0 = readline().trim();
var n = parseInt(str_0);
var str_1 = readline();
var line_list_1 = str_1.trim().split(" ");
var arr = new Array();
for(var i = 0; i < line_list_1.length; i++){
arr[i] = parseInt(line_list_1[i]);
}
let sol = new Solution();
result = sol.solution(n, arr);
print(result);