Min/Max Subarry

Given an integer arraynums, find the contiguous subarray (containing at least one number) which has the smallest/largest sum and return its sum.

class Solution {
    public int minSubArray(int[] nums) {
        int sum = nums[0];
        int res = nums[0];

        for(int i = 1; i < nums.length; i++){
            sum = nums[i] + (sum > 0 ? 0 : sum);
            res = Math.min(res, sum);
        }
        return res;
    }
}
class Solution {
    public int maxSubArray(int[] nums) {
        int sum = nums[0];
        int res = nums[0];

        for(int i = 1; i < nums.length; i++){
            sum = nums[i] + (sum < 0 ? 0 : sum);
            res = Math.max(res, sum);
        }
        return res;
    }
}

Follow-up

circular case

a1 a2 a3 a4 a5 a6
----        -----
      =====
       min
  • totalSum - min = max

  • totalSum - max = min

Last updated