给定数组,要求不相邻元素组成的子数组的和最大.
public class Test {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 2, 7, 9, 4, 8, 6};
System.out.println(maxNoNeighborhoodSum(arr));
}
public static int maxNoNeighborhoodSum(int[] arr){
int[] opt = new int[arr.length];
opt[0] = arr[0];
if(arr.length == 1){
return opt[0];
}
opt[1] = Math.max(arr[0], arr[1]);
if(arr.length == 2){
return opt[1];
}
for(int i = 2; i < arr.length; i++) {
int a = opt[i - 2] + arr[i];
int b = opt[i - 1];
opt[i] = Math.max(a, b);
}
return opt[arr.length - 1];
}
}