在本教程中,我们将讨论一个程序,以找到大小为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