求数组非连续子序列的最大和

题目描述:

1. 一个整数数组L, L=[2,-3,3,50], L的一个非连续子序列,使其和最大,输出最大子序列的和。这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。例如,对于L=[2,-3,3,50], 输出52分析:很明显,该列表最大非连续子序列为[2,50])。测试例子:L=[-2,-3,3,50,1,-1,100]

用动态规划的思想:

public class MaxSubSum {
    
    public static int maxSubSum(int[] a) {
       a[1] = Math.max(a[1],a[0]);
       for (int i = 2; i < a.length; i++) {
            a[i]= Math.max(Math.max(a[i],a[i-1]),a[i-2]+a[i]);
        }
        return a[a.length-1];
    }
    public static void main(String[] args) {
        int [] a= {2,-3,3,50};
        int [] b= {-2,-3,3,50,1,-1,100};
        int result_a = maxSubSum(a);
        int result_b = maxSubSum(b);
        System.out.println(result_a);
        System.out.println(result_b);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36330643/article/details/80190398
今日推荐