Deque STL in C++ | HackerRank Solution

Hello there, today we are going to solve Deque STL Hacker Rank Solution in C++.

Hello there, today we are going to solve Deque STL Hacker Rank Solution in C++.

Table Of Contents 👊

Problem

Double ended queue or Deque(part of C++ STL) are sequence containers with dynamic sizes that can be expanded or contracted on both ends (either its front or its back). The member functions of deque that are mainly used are:

Deque Template:

std::deque<value_type>

Declaration:

deque<int> mydeque; //Creates a double ended queue of deque of int type

Size

int length = mydeque.size(); //Gives the size of the deque

Push

mydeque.push_back(1); //Pushes element at the end
mydeque.push_front(2); //Pushes element at the beginning

Pop

mydeque.pop_back(); //Pops element from the end
mydeque.pop_front(); //Pops element from the beginning

Empty

mydeque.empty() //Returns a boolean value which tells whether the deque is empty or not

Given a set of arrays of size N and an integer K, you have to find the maximum integer for each and every contiguous subarray of size K for each of the given arrays.

Input Format

Given a set of arrays of size N and an integer K, you have to find the maximum integer for each and every contiguous subarray of size K for each of the given arrays.

Constraints

  • 1 <= T <= 1000
  • 1 <= N <= 10000
  • 1 <= K <= N 
  • 1 <= Ai <= 10000, where Ai is the ith element in the Array A.

Output Format

For each of the contiguous subarrays of size K of each array, you have to print the maximum integer.

Sample Input

2
5 2
3 4 6 3 4
7 4
3 4 5 8 1 4 10

Sample Output 

4 6 6 4
8 8 8 10

Explanation 

For the first case, the contiguous subarrays of size 2 are {3,4},{4,6},{6,3} and {3,4}. The 4 maximum elements of subarray of size 2 are: 4 6 6 4.

For the second case,the contiguous subarrays of size 4 are {3,4,5,8},{4,5,8,1},{5,8,1,4} and {8,1,4,10}. The 4 maximum element of subarray of size 4 are: 8 8 8 10.

Solution - Deque STL in C++

#include <iostream>
#include <deque> 
using namespace std;

void printKMax(int arr[], int n, int k){
    //Write your code here.
    std::deque<int>  dq(k);
    int i;
    for (i = 0; i < k; ++i) {
        while ( (!dq.empty()) && arr[i] >= arr[dq.back()])
            dq.pop_back();
 
        dq.push_back(i);
    }
 
    for ( ; i < n; ++i) {
        cout << arr[dq.front()] << " ";
 
        while ( (!dq.empty()) && dq.front() <= i - k)
            dq.pop_front();
 
        while ( (!dq.empty()) && arr[i] >= arr[dq.back()])
            dq.pop_back();
 
        dq.push_back(i);
    }
 
    cout << arr[dq.front()] << endl;
}

int main(){
  
    int t;
    cin >> t;
    while(t>0) {
        int n,k;
        cin >> n >> k;
        int i;
        int arr[n];
        for(i=0;i<n;i++)
              cin >> arr[i];
        printKMax(arr, n, k);
        t--;
      }
      return 0;
}

Disclaimer: The above Problem (Deque STL) is generated by Hacker Rank but the Solution is Provided by Sloth Coders. This tutorial is only for Educational and Learning Purpose.

Sloth Coders is a Learning Platform for Coders, Programmers and Developers to learn from the basics to advance of Coding of different langauges(python, Java, Javascript and many more).

Post a Comment