C ++中大小为k的子序列的最大乘积

在本教程中,我们将讨论一个程序,以找到大小为k的子序列的最大乘积。

为此,我们将提供一个包含n个整数的数组。我们的任务是从数组中找到最大乘积值的大小为k的子序列。

示例

#include <algorithm>

#include <iostream>

using namespace std;

//找出子序列

int maxProductSubarrayOfSizeK(int A[], int n, int k) {

   sort(A, A + n);

   //存储产品值

   int product = 1;

   if (A[n - 1] == 0 && (k & 1))

      return 0;

}   

if (A[n - 1] <= 0 && (k & 1)) {

   for (int i = n - 1; i >= n - k; i--)

      product *= A[i];

      return product;

   }

   int i = 0;

   int j = n - 1;

   if (k & 1) {

      product *= A[j];

      j--;

      k--;

   }

   k >>= 1;

   for (int itr = 0; itr < k; itr++) {

      int left_product = A[i] * A[i + 1];

      int right_product = A[j] * A[j - 1];

      if (left_product > right_product) {

         product *= left_product;

         i += 2;

      }

      else {

         product *= right_product;

         j -= 2;

      }

   }

   return product;

}

int main() {

   int A[] = { 1, 2, -1, -3, -6, 4 };

   int n = sizeof(A) / sizeof(A[0]);

   int k = 4;

   cout << maxProductSubarrayOfSizeK(A, n, k);

   return 0;

}

输出结果

144

以上是 C ++中大小为k的子序列的最大乘积 的全部内容, 来源链接: utcz.com/z/338306.html

回到顶部