41 lines
1.1 KiB
Text
41 lines
1.1 KiB
Text
int largest_continuous_sum(int[] arr, int lo, int hi) {
|
|
if (lo == hi) {
|
|
return arr[lo];
|
|
}
|
|
var mid = (lo + hi) >> 1;
|
|
var left_sum = largest_continuous_sum(arr, lo, mid);
|
|
var right_sum = largest_continuous_sum(arr, mid + 1, hi);
|
|
|
|
var sum = arr[mid + 1];
|
|
var middle_right_sum = arr[mid + 1];
|
|
for (var i = mid + 2; i <= hi; i = i + 1; ) {
|
|
sum = sum + arr[i];
|
|
if (sum > middle_right_sum) {
|
|
middle_right_sum = sum;
|
|
}
|
|
}
|
|
|
|
sum = arr[mid];
|
|
var middle_left_sum = arr[mid];
|
|
for (var i = mid - 1; i >= lo; i = i - 1; ) {
|
|
sum = sum + arr[i];
|
|
if (sum > middle_left_sum) {
|
|
middle_left_sum = sum;
|
|
}
|
|
}
|
|
|
|
var middle_sum = middle_left_sum + middle_right_sum;
|
|
|
|
if (middle_sum > left_sum & middle_sum > right_sum) {
|
|
return middle_sum;
|
|
} else if (left_sum > middle_sum & left_sum > right_sum) {
|
|
return left_sum;
|
|
}
|
|
|
|
return right_sum;
|
|
}
|
|
|
|
int program(int argc, string[] argv) {
|
|
var arr = new int[]{2, -3, 100, 5, 20, -50};
|
|
return largest_continuous_sum(arr, 0, 5);
|
|
}
|