Largest triplet product in a stream - GeeksforGeeks

05 Nov, 2021
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. 
Insert arr[i] in the priority queueAs 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.Print x*y*zReinsert x, y, z.
Insert arr[i] in the priority queue
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.
Print x*y*z
Reinsert x, y, z.
C++
Java
Python3
C#
Javascript
// C++ implementation of largest triplet// multiplication#include <bits/stdc++.h>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<int> 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 Functionint main(){    int arr[] = { 1, 2, 3, 4, 5 };    int n = sizeof(arr) / sizeof(arr[0]);    LargestTripletMultiplication(arr, n);    return 0;}
// Java implementation of largest triplet// multiplicationimport 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<Integer> 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 implementation of largest triplet# multiplicationfrom 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 Codeif __name__ == '__main__':      arr = [ 1, 2, 3, 4, 5 ]    n = len(arr)         LargestTripletMultiplication(arr, n)     # This code is contributed by math_lover
// C# implementation of largest triplet// multiplicationusing 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<int> q = new List<int>();     // 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
<script>// javascript implementation of largest triplet// multiplication    // Prints the product of three largest numbers    // in subarray arr[0..i]    function LargestTripletMultiplication(arr , n) {        // call a priority queue        var q = [];         // traversing the array        for (i = 0; i < n; i++) {            // pushing arr[i] in array            q.push(arr[i]);q.sort();                           // if less than three elements are present            // in array print -1            if (q.length < 3)                document.write("-1<br/>");            else {                // pop three largest elements                q.sort();                              var x = q.pop();                var y = q.pop();                var z = q.pop();                 // Reinsert x, y, z in priority_queue                var ans = x * y * z;                document.write(ans+"<br/>");                q.push(x);                q.push(y);                q.push(z);                q.sort();                q.reverse();            }        }    }     // Driver code             var arr = [ 1, 2, 3, 4, 5 ];        var n = arr.length;        LargestTripletMultiplication(arr, n); // This code contributed by umadevi9616</script>
Output: 
-1
-1
6
24
60
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.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nobody_cares
math_lover
Rajput-Ji
umadevi9616
arorakashish0911
array-stream
Arrays
Heap
Arrays
Heap
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Top 50 Array Coding Problems for Interviews
Introduction to Arrays
Multidimensional Arrays in Java
Linear Search
Python | Using 2D arrays/lists the right way
HeapSort
Binary Heap
Huffman Coding | Greedy Algo-3
K'th Smallest/Largest Element in Unsorted Array | Set 1
k largest(or smallest) elements in an array