diff options
Diffstat (limited to 'max_abs_sum_any_subarr.c')
-rw-r--r-- | max_abs_sum_any_subarr.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/max_abs_sum_any_subarr.c b/max_abs_sum_any_subarr.c index 8ddd1eb..f7ae0ca 100644 --- a/max_abs_sum_any_subarr.c +++ b/max_abs_sum_any_subarr.c @@ -10,21 +10,13 @@ */ int maxAbsoluteSum(int *nums, int numsSize) { - int max_sum = INT_MIN, min_sum = INT_MAX, curr_sum = 0; + int total = 0, min = 0, max = 0; for (int i = 0; i < numsSize; i++) { - curr_sum += nums[i]; - max_sum = max_sum > curr_sum ? max_sum : curr_sum; - if (curr_sum < 0) - curr_sum = 0; + total += nums[i]; + min = fmin(min, total); + max = fmax(max, total); } - curr_sum = 0; - for (int i = 0; i < numsSize; i++) { - curr_sum += nums[i]; - min_sum = min_sum < curr_sum ? min_sum : curr_sum; - if (curr_sum > 0) - curr_sum = 0; - } - return abs(max_sum) > abs(min_sum) ? abs(max_sum) : abs(min_sum); + return max - min; } int main() { |