给定阵列A N个整数,你必须完全执行 K操作就可以了。在每个操作中,您必须删除数组的第一个或最后一个元素。我们将数组的幂定义为数组的第一个和最后一个元素的乘积。找出他完全执行后可以达到的最大功率 K操作。
有人可以给我一个如何处理这个问题的提示吗?
答案 0 :(得分:1)
这不是最佳解决方案,您可以考虑最佳解决方案,这是一个提示。
public class Main {
static int maxPower(int array[], int leftIndex, int rightIndex, int k){
if(leftIndex>array.length-1 || rightIndex < 0)
return Integer.MIN_VALUE;
else if(k==0){
return array[leftIndex]*array[rightIndex];
}else{
return Math.max(maxPower(array,leftIndex+1,rightIndex,k-1),maxPower(array,leftIndex,rightIndex-1,k-1));
}
}
public static void main(String[] args){
int array[] = {1,4,5,7,2,4,9,4,6,2,7,0,5};
System.out.print(maxPower(array,0,array.length-1,2));
}
}
答案 1 :(得分:0)
这个问题需要一点观察
让我们考虑一个包含7个元素的数组
{1, 5, 3, 4, 1, 3, 2}
设k为3?
如果我们观察到可能性很小
删除索引6,5,4
删除索引0,6,5
删除索引0,1,6
删除索引0,1,2
不能有任何其他可能性
所以我们尝试让最后一个元素跳过少数起始索引和少量结束索引
对于
案例1: 我们从开始跳过没有,从结束时跳过6,5,4,我们将索引0,3作为第一个和最后一个元素
案例2: 我们从开始跳过0索引,从结束跳过6,5,我们将索引1,4作为第一个和最后一个元素
案例3: 我们从开始跳过0,1指数,从结束6跳过,我们将指数2,5作为第一个和最后一个生命
案例4: 我们从开始跳过0,1,2索引,从开始跳过没有,我们将索引3,6作为第一个和最后一个生命
现在考虑每个案例并尝试找出最大产品
int findMaxPower(int arr[], int length, int k){
int x = 0;
int maximum = -1;
for(int j=k;j>=0;j--){
maximum = max(maximum, arr[x]*arr[length - j - 1]);
x++;
}
return maximum;
}