53. Maximum Subarray(java)

来源:互联网 发布:波段轻松涨停指标源码 编辑:程序博客网 时间:2024/06/14 23:21

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

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

More practice:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

取整数的最小值可以用:

int max = Integer.MIN_VALUE

int max=0x80000001

方法一:

二次遍历法,时间复杂度n方。

public class Solution {    public int maxSubArray(int[] nums) {        int sum=0;        int max=0x80000001;        if(nums.length==1) return nums[0];        for(int i=0;i<nums.length;i++){            sum=0;            for(int j=i;j<nums.length;j++){                sum=sum+nums[j];                if(sum>max) max=sum;            }        }        return max;    }}

方法二:维护一个sum数组,遍历到某个数A[i]时,考虑sum[i -1] + A[I]后是更大还是更小,如果更大则加,如果更小,就使sum[i] = 此数。然后用max记录sum数组中最大的那个数即可。

public class Solution {      public int maxSubArray(int[] A) {          int len = A.length;          int max = A[0];          int[] sum = new int[len];   //***          sum[0] = A[0];                    for(int i = 1; i < len; i++){              sum[i] = Math.max(sum[i - 1] + A[i], A[i]);  //***              max = Math.max(max, sum[i]);          }          return max;      }  }