- Related Questions & Answers
- Maximum product of an increasing subsequence of size 3 in C++
- Maximum product of an increasing subsequence of size 3 in C++ program
- Maximum product of a triplet (subsequence of size 3) in array in C++
- Maximum product of a triplet (subsequence of size 3) in array in C++ Program.
- Maximum product of an increasing subsequence in C++
- Maximum product of an increasing subsequence in C++ Program
- Maximum number of trailing zeros in the product of the subsets of size k in C++
- Product of all Subsequences of size K except the minimum and maximum Elements in C++
- Maximum of all Subarrays of size k using set in C++ STL
- Program to find lexicographically smallest subsequence of size k in Python
- Maximum Unique Element in every subarray of size K in c++
- Maximum product quadruple (sub-sequence of size 4) in array in C++
- Find maximum (or minimum) sum of a subarray of size k in C++
- Find Maximum XOR value of a sub-array of size k in C++
- Maximum Size Subarray Sum Equals k in C++

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

In this problem, we are given an array arr[] of integers and a number k. Our task is to create a program to find the Maximum product of subsequence of size k in C++.

**Problem Description** − Here, we need to find the subsequence of size k, 1<= k <= n which has the maximum product of its elements.

**Let’s take an example to understand the problem,**

arr[] = {1, 5, 6, -2, 0, 4} , k = 3

120

The subsequence of size 3 that has the maximum product is (5, 6, 4). The product is 120.

To solve this problem, we will first sort the array arr[] and then based on the elements of arr[] and the value of k. The method changes as in the following cases −

**Case 1 (if k is even)** − The product can have all maximum k values except 0. Here, we also need to consider the negative value pairs. As their magnitude can also give the result of maximum.

**Case 2 (if k is odd)** − This is a bit complex condition and values define how the result needs to be calculated. This case needs to be further classified based on the max element of the array.

**Case 2.1 (if max no. is positive)** − this means the array is a mixture of positive and negative numbers. In this case, we will find the max k elements and also search for max pairs from the negative side (if possible that might give the result).

**Case 2.2 (if max no. is Zero)** − This means the array contains all negative elements and zero. In this case, the max result will be 0, as multiplying an odd number of negative elements will result in a negative number, which means 0 is the maximum product.

**Case 2.3 (if max no. is negative)** − This means the array contains only negative numbers. In this case, the maximum result will be provided by multiplying the elements with minimum magnitude i.e. the maximum array will help.

In this way, we need to keep a check on the value of elements as well as k. For optimum result. For this, we will keep the max and min both sides in array to check if the result can be yielded by multiplying negative pairs to the result.

**Program to illustrate the working of our solution,**

#include <bits/stdc++.h> using namespace std; int findMaxSubArrayProduct(int arr[], int n, int k) { sort(arr, arr + n); int maxProd = 1; int i = 0, j = 0; int maxprod, minprod; if (arr[n - 1] == 0 && (k % 2 == 1)) return 0; if (arr[n - 1] <= 0 && (k % 2 == 1)) { for (i = n - 1; i >= n - k; i--) maxProd *= arr[i]; return maxProd; } i = 0; j = n - 1; if (k % 2 == 1) { maxProd *= arr[j]; j--; k--; } k = k/2; int it = 0; while(it < k){ int minprod = arr[i] * arr[i + 1]; int maxprod = arr[j] * arr[j - 1]; if (minprod > maxprod) { maxProd *= minprod; i += 2; } else { maxProd *= maxprod; j -= 2; } it++; } return maxProd; } int main() { int arr[] = { 1, 5, 6, -2, 0, 4 }; int n = sizeof(arr) / sizeof(arr[0]); int k = 3; cout<<"The maximum product of subsequence of size "<<k<<" is "<<findMaxSubArrayProduct(arr, n, k); return 0; }

The maximum product of subsequence of size 3 is 120

Advertisements