using System.Collections.Generic;
public class Solution {
public static int MaxSum(List<int> nums) {
int result = nums[0];
// prefix - хранит максимальную сумму на отрезке
int prefix = nums[0];
for (int i = 1; i < nums.Count; i++) {
// берем самый выгодный из вариантов:
// - nums[i] начинает формировать новую последовательность
// - nums[i] добавляется к предыдущей последовательности и увеличивает общую сумму
prefix = Math.Max(prefix + nums[i], nums[i]);
result = Math.Max(prefix, result);
}
// разделение на prefix и result нужно, чтобы учитывать
// последовательность только из отрицательных чисел
return result;
}
}
#include <vector>
#include <algorithm>
using namespace std;
int maxSum(vector<int>& nums) {
int result = nums[0];
// prefix - хранит максимальную сумму на отрезке
int prefix = nums[0];
for (int i = 1; i < nums.size(); i++) {
// берем самый выгодный из вариантов:
// - nums[i] начинает формировать новую последовательность
// - nums[i] добавляется к предыдущей последовательности и увеличивает общую сумму
prefix = max(prefix + nums[i], nums[i]);
result = max(prefix, result);
}
// разделение на prefix и result нужно, чтобы учитывать
// последовательность только из отрицательных чисел
return result;
}
package main
func maxSum(nums []int) int {
result := nums[0]
// prefix - хранит максимальную сумму на отрезке
prefix := nums[0]
for i := 1; i < len(nums); i++ {
// берем самый выгодный из вариантов:
// - nums[i] начинает формировать новую последовательность
// - nums[i] добавляется к предыдущей последовательности и увеличивает общую сумму
if prefix + nums[i] > nums[i] {
prefix = prefix + nums[i]
} else {
prefix = nums[i]
}
if prefix > result {
result = prefix
}
}
// разделение на prefix и result нужно, чтобы учитывать
// последовательность только из отрицательных чисел
return result
}
import java.util.*;
public class Solution {
public int maxSum(List<Integer> nums) {
int result = nums.get(0);
// prefix - хранит максимальную сумму на отрезке
int prefix = nums.get(0);
for (int i = 1; i < nums.size(); i++) {
// берем самый выгодный из вариантов:
// - nums[i] начинает формировать новую последовательность
// - nums[i] добавляется к предыдущей последовательности и увеличивает общую сумму
prefix = Math.max(prefix + nums.get(i), nums.get(i));
result = Math.max(prefix, result);
}
// разделение на prefix и result нужно, чтобы учитывать
// последовательность только из отрицательных чисел
return result;
}
}
from typing import *
def max_sum(nums: List[int]) -> int:
result = nums[0]
# prefix - хранит максимальную сумму на отрезке
prefix = nums[0]
for i in range(1, len(nums)):
# берем самый выгодный из вариантов:
# - nums[i] начинает формировать новую последовательность
# - nums[i] добавляется к предыдущей последовательности и увеличивает общую сумму
prefix = max(prefix + nums[i], nums[i])
result = max(prefix, result)
# разделение на prefix и result нужно, чтобы учитывать
# последовательность только из отрицательных чисел
return result
/**
* @param {number[]} nums
* @returns {number}
*/
export function maxSum(nums) {
let result = nums[0];
// prefix - хранит максимальную сумму на отрезке
let prefix = nums[0];
for (let i = 1; i < nums.length; i++) {
// берем самый выгодный из вариантов:
// - nums[i] начинает формировать новую последовательность
// - nums[i] добавляется к предыдущей последовательности и увеличивает общую сумму
prefix = Math.max(prefix + nums[i], nums[i]);
result = Math.max(prefix, result);
}
// разделение на prefix и result нужно, чтобы учитывать
// последовательность только из отрицательных чисел
return result;
}