Open in App
Not now

# Largest triplet product in a stream

• Difficulty Level : Easy
• Last Updated : 15 Dec, 2022

Given a stream of integers represented as arr[]. For each index i from 0 to n-1, print the multiplication of largest, second largest, third largest element of the subarray arr[0…i]. If i < 2 print -1.

Examples:

Input : arr[] = {1, 2, 3, 4, 5}
Output :-1
-1
6
24
60
Explanation : for i = 2 only three elements
are there {1, 2, 3} so answer is 6. For i = 3
largest three elements are {2, 3, 4} their
product is 2*3*4 = 24 ....so on

We will use priority queue here.

1. Insert arr[i] in the priority queue
2. As the top element in priority queue is largest so pop it and store it as x. Now the top element in the priority queue will be the second largest element in subarray arr[0…i] pop it and store as y. Now the top element is third largest element in subarray arr[0…i] so pop it and store it as z.
3. Print x*y*z
4. Reinsert x, y, z.

Below is the implementation of the above approach:

## C++

 // C++ implementation of largest triplet // multiplication #include using namespace std;   // Prints the product of three largest numbers // in subarray arr[0..i] void LargestTripletMultiplication(int arr[], int n) {     // call a priority queue     priority_queue q;       // traversing the array     for (int i = 0; i < n; i++) {         // pushing arr[i] in the array         q.push(arr[i]);           // if less than three elements are present         // in array print -1         if (q.size() < 3)             cout << "-1" << endl;         else {             // pop three largest elements             int x = q.top();             q.pop();             int y = q.top();             q.pop();             int z = q.top();             q.pop();               // Reinsert x, y, z in priority_queue             int ans = x * y * z;             cout << ans << endl;             q.push(x);             q.push(y);             q.push(z);         }     }     return; }   // Driver Function int main() {     int arr[] = { 1, 2, 3, 4, 5 };     int n = sizeof(arr) / sizeof(arr[0]);     LargestTripletMultiplication(arr, n);     return 0; }

## Java

 // Java implementation of largest triplet // multiplication import java.util.Collections; import java.util.PriorityQueue;   class GFG {       // Prints the product of three largest numbers     // in subarray arr[0..i]     static void LargestTripletMultiplication(int arr[], int n)     {         // call a priority queue         PriorityQueue q = new PriorityQueue(Collections.reverseOrder());           // traversing the array         for (int i = 0; i < n; i++) {             // pushing arr[i] in array             q.add(arr[i]);               // if less than three elements are present             // in array print -1             if (q.size() < 3)                 System.out.println("-1");             else {                 // pop three largest elements                 int x = q.poll();                 int y = q.poll();                 int z = q.poll();                   // Reinsert x, y, z in priority_queue                 int ans = x * y * z;                 System.out.println(ans);                 q.add(x);                 q.add(y);                 q.add(z);             }         }     }       // Driver code     public static void main(String[] args)     {         int arr[] = { 1, 2, 3, 4, 5 };         int n = arr.length;         LargestTripletMultiplication(arr, n);     } }   // This code is contributed by shubham96301

## Python3

 # Python3 implementation of largest triplet # multiplication from queue import PriorityQueue   # Prints the product of three largest # numbers in subarray arr[0..i] def LargestTripletMultiplication(arr, n):           # Call a priority queue     q = PriorityQueue()       # Traversing the array     for i in range(n):                   # Pushing -arr[i] in array         # to get max PriorityQueue         q.put(-arr[i])           # If less than three elements         # are present in array print -1         if (q.qsize() < 3):             print(-1)         else:                           # pop three largest elements             x = q.get()             y = q.get()             z = q.get()               # Reinsert x, y, z in             # priority_queue             ans = x * y * z                           print(-ans)                           q.put(x);             q.put(y);             q.put(z);   # Driver Code if __name__ == '__main__':        arr = [ 1, 2, 3, 4, 5 ]     n = len(arr)           LargestTripletMultiplication(arr, n)       # This code is contributed by math_lover

## C#

 // C# implementation of largest triplet // multiplication using System; using System.Collections.Generic; public class GFG {     // Prints the product of three largest numbers   // in subarray arr[0..i]   static void LargestTripletMultiplication(int []arr, int n)   {     // call a priority queue     List q = new List();       // traversing the array     for (int i = 0; i < n; i++)     {         // pushing arr[i] in array       q.Add(arr[i]);       q.Sort();       q.Reverse();         // if less than three elements are present       // in array print -1       if (q.Count < 3)         Console.WriteLine("-1");       else       {           // pop three largest elements         int x = q[0];         int y = q[1];         int z = q[2];         q.RemoveRange(0, 3);           // Reinsert x, y, z in priority_queue         int ans = x * y * z;         Console.WriteLine(ans);         q.Add(x);         q.Add(y);         q.Add(z);       }     }   }     // Driver code   public static void Main(String[] args)   {     int []arr = { 1, 2, 3, 4, 5 };     int n = arr.Length;     LargestTripletMultiplication(arr, n);   } }     // This code is contributed by Rajput-Ji

## Javascript



Output

-1
-1
6
24
60

Time Complexity: O(N * log N ).
Auxiliary Space: O(N), N is the length of the array.

This article is contributed by Ayush Jha. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up
Related Articles