Given an array of integers, find a contiguous subarray which has the largest sum.

**Example**

For example, given the array **[−2,2,−3,4,−1,2,1,−5,3]**, the contiguous subarray [4,−1,2,1] has the largest sum = 6.

**Note**

The subarray should contain at least one number

**Challenge**

Can you do it in time complexity O(n)?

Solution: O(n) time O(1) space. one pass. **Prefix Sum**

public int maxSubArray(ArrayList<Integer> nums) { if (nums == null || nums.size() == 0) { return 0; } int maxSum = Integer.MIN_VALUE; int sum = 0; int minSum = 0; for (Integer num : nums) { sum += num; maxSum = Math.max(maxSum, sum - minSum); minSum = Math.min(minSum, sum); } return maxSum; }