K操作后的最大产品

时间:2017-01-13 18:09:16

标签: arrays

给定阵列A N个整数,你必须完全执行 K操作就可以了。在每个操作中,您必须删除数组的第一个或最后一个元素。我们将数组的幂定义为数组的第一个和最后一个元素的乘积。找出他完全执行后可以达到的最大功率 K操作。

有人可以给我一个如何处理这个问题的提示吗?

2 个答案:

答案 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?

如果我们观察到可能性很小

  1. 删除索引6,5,4

  2. 删除索引0,6,5

  3. 删除索引0,1,6

  4. 删除索引0,1,2

  5. 不能有任何其他可能性

    所以我们尝试让最后一个元素跳过少数起始索引和少量结束索引

    对于

    案例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;
    }