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