CS153/hw6/hw4programs/sp22_tests/largest_cont_sum.oat

42 lines
1.1 KiB
Text
Raw Normal View History

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);
}