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