package array;
/**
* [53] æå¤§ååºå
* @author: Aghao
*
* Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
*
* Example 1:
*
* Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
* Output: 6
* Explanation: [4,-1,2,1] has the largest sum = 6.
*
* 卿è§åæ³
* æ¶é´å¤æåº¦ï¼O(n)
* 空é´å¤æåº¦ï¼O(1)
*
* æ´åéåæ³
* æ¶é´å¤æåº¦ï¼O(n*n)
* 空é´å¤æåº¦ï¼O(1)
*/
public class MaxSubArray {
public static void main(String[] args) {
int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
// int result = new MaxSubArray().maxSubArrayViolence(nums);
int result = new MaxSubArray().maxSubArray(nums);
System.out.println(result);
}
// 卿è§åæ³
// åååºåå妿å°äº0ï¼å°±èå¼
private int maxSubArray(int[] nums) {
int pre = 0;
int maxRes = nums[0];
for(int i:nums) {
pre = Math.max(pre + i, i);
maxRes = Math.max(pre, maxRes);
}
return maxRes;
}
// æ´åæ³
private int maxSubArrayViolence(int[] nums) {
int maxRes = nums[0];
for(int i=0;i