您的位置:首页 > 其它

[算法]数组中求出下标不连续的任意个数,使得和最大

2018-09-16 21:56 381 查看

给定一个数组,可以从数组中取出下标不连续的任意个数,求可以取出的数的和的最大值,例如:给出数组A[]={1,2,2,5,3,4,3}可以取出的最大和为2+5+4=11。现再给定数组{3,9,7,5,1,3,1,2,7},能取出的数的和的最大值是24。

方法一:动态规划

假设原数组为arr,辅助数组为data. 则data[0] = arr[0], data[i] = max{arr[0], arr[1]}.

 i>=2时, data[i] = Max{data[i-1], data[i-2]+arr[i]}

data[i]表示以子数组arr[0..i]符合条件的最大值。

public static int getMaxValue(int[] arr){
int[] data = new int[arr.length];
data[0] = arr[0];
data[1] = Math.max(arr[0], arr[1]);
for (int i = 2; i < arr.length; i++) {
int val = arr[i];
data[i] = Math.max(data[i - 1], data[i - 2] + val);
}
return data[data.length - 1];
}

方法二:非动态规划

public static int getMaxValue2(int[] arr) {
int sum1 = 0, sum2 = 0;
for(int i = 0; i < arr.length; i++){
if(i % 2==0){
sum1 = Math.max(sum2, sum1 + arr[i]);
}else{
sum2 = Math.max(sum1, sum2 + arr[i]);
}
}
return Math.max(sum1,sum2);
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐