int maxSubArray(vector<int>& nums) {
int best = nums[0];
for (int i = 0; i < (int)nums.size(); i++) {
for (int j = i; j < (int)nums.size(); j++) {
int sum = 0;
for (int k = i; k <= j; k++) sum += nums[k];
best = max(best, sum);
}
}
return best;
}
public int maxSubArray(int[] nums) {
int best = nums[0];
for (int i = 0; i < nums.length; i++) {
for (int j = i; j < nums.length; j++) {
int sum = 0;
for (int k = i; k <= j; k++) sum += nums[k];
best = Math.max(best, sum);
}
}
return best;
}
def max_sub_array(nums):
best = nums[0]
for i in range(len(nums)):
for j in range(i, len(nums)):
total = 0
for k in range(i, j + 1): total += nums[k]
best = max(best, total)
return best
function maxSubArray(nums: number[]): number {
let best = nums[0];
for (let i = 0; i < nums.length; i++) {
for (let j = i; j < nums.length; j++) {
let sum = 0;
for (let k = i; k <= j; k++) sum += nums[k];
best = Math.max(best, sum);
}
}
return best;
}
int maxSubArray(vector<int>& nums) {
int best = nums[0];
for (int i = 0; i < (int)nums.size(); i++) {
int sum = 0;
for (int j = i; j < (int)nums.size(); j++) {
sum += nums[j];
best = max(best, sum);
}
}
return best;
}
public int maxSubArray(int[] nums) {
int best = nums[0];
for (int i = 0; i < nums.length; i++) {
int sum = 0;
for (int j = i; j < nums.length; j++) {
sum += nums[j];
best = Math.max(best, sum);
}
}
return best;
}
def max_sub_array(nums):
best = nums[0]
for i in range(len(nums)):
total = 0
for j in range(i, len(nums)):
total += nums[j]
best = max(best, total)
return best
function maxSubArray(nums: number[]): number {
let best = nums[0];
for (let i = 0; i < nums.length; i++) {
let sum = 0;
for (let j = i; j < nums.length; j++) {
sum += nums[j];
best = Math.max(best, sum);
}
}
return best;
}
int maxSubArray(vector<int>& nums) {
int best = nums[0], current = nums[0];
for (int i = 1; i < (int)nums.size(); i++) {
current = max(nums[i], current + nums[i]);
best = max(best, current);
}
return best;
}
public int maxSubArray(int[] nums) {
int best = nums[0], current = nums[0];
for (int i = 1; i < nums.length; i++) {
current = Math.max(nums[i], current + nums[i]);
best = Math.max(best, current);
}
return best;
}
def max_sub_array(nums):
best = current = nums[0]
for i in range(1, len(nums)):
current = max(nums[i], current + nums[i])
best = max(best, current)
return best
function maxSubArray(nums: number[]): number {
let best = nums[0], current = nums[0];
for (let i = 1; i < nums.length; i++) {
current = Math.max(nums[i], current + nums[i]);
best = Math.max(best, current);
}
return best;
}
int maxSubArray(vector<int>& nums) {
function<array<int, 4>(int, int)> solve = [&](int lo, int hi) -> array<int, 4> {
if (lo == hi) return {nums[lo], nums[lo], nums[lo], nums[lo]};
int mid = (lo + hi) >> 1;
auto left = solve(lo, mid), right = solve(mid + 1, hi);
int total = left[0] + right[0];
int prefix = max(left[1], left[0] + right[1]);
int suffix = max(right[2], right[0] + left[2]);
int best = max({left[3], right[3], left[2] + right[1]});
return {total, prefix, suffix, best};
};
return solve(0, (int)nums.size() - 1)[3];
}
public int maxSubArray(int[] nums) {
return solve(nums, 0, nums.length - 1)[3];
}
private int[] solve(int[] nums, int lo, int hi) {
if (lo == hi) return new int[]{nums[lo], nums[lo], nums[lo], nums[lo]};
int mid = (lo + hi) >> 1;
int[] left = solve(nums, lo, mid), right = solve(nums, mid + 1, hi);
int total = left[0] + right[0];
int prefix = Math.max(left[1], left[0] + right[1]);
int suffix = Math.max(right[2], right[0] + left[2]);
int best = Math.max(left[3], Math.max(right[3], left[2] + right[1]));
return new int[]{total, prefix, suffix, best};
}
def max_sub_array(nums):
def solve(lo, hi):
if lo == hi: return [nums[lo]] * 4
mid = (lo + hi) >> 1
left, right = solve(lo, mid), solve(mid + 1, hi)
total = left[0] + right[0]
prefix = max(left[1], left[0] + right[1])
suffix = max(right[2], right[0] + left[2])
best = max(left[3], right[3], left[2] + right[1])
return [total, prefix, suffix, best]
return solve(0, len(nums) - 1)[3]
function maxSubArray(nums: number[]): number {
const solve = (lo: number, hi: number): number[] => {
if (lo === hi) return [nums[lo], nums[lo], nums[lo], nums[lo]];
const mid = (lo + hi) >> 1;
const left = solve(lo, mid), right = solve(mid + 1, hi);
const total = left[0] + right[0];
const prefix = Math.max(left[1], left[0] + right[1]);
const suffix = Math.max(right[2], right[0] + left[2]);
const best = Math.max(left[3], right[3], left[2] + right[1]);
return [total, prefix, suffix, best];
};
return solve(0, nums.length - 1)[3];
}