两个子数组的最大和

package day;
/**
 * 两个子数组的最大和
 * 1.先逆序从右忘左算出以每一个index位开始到右的累加和记载在h[]中,
 * 在正序遍历最大的累加和,遍历的过程中前后最大值累加,记载最大值
 * @author Administrator
 *
 */
public class Demo1 {
    public int method(int[] array){
        int arraylength = array.length;
        int[] h = new int[arraylength];
        h[arraylength - 1] = array[arraylength - 1];
        int cur = array[arraylength - 1];
        for(int i = arraylength - 2;i >=0;i --){
            cur = cur < 0 ? 0 : cur;
            cur= array[i] + cur;
            h[i] = Math.max(cur, h[i + 1]);
        }
        cur = array[0];
        int lmax = array[0];
        int max = array[0] + h[1];
        for(int i = 1;i < array.length - 1;i ++){
            cur = cur < 0 ? 0 : cur;
            cur = cur + array[i];
            lmax = Math.max(cur, lmax);
            max = Math.max((lmax + h[i + 1]), max);
        }
        return max;
    }
    public static void main(String[] args) {
        int[] array = {1,-5,7,-4,6,-9,3,6,-7};
        System.out.println(new Demo1().method(array));
    }
}

 

posted @ 2017-04-26 00:05  起个po名真费劲  阅读(215)  评论(0编辑  收藏  举报