# Check if all array elements are present in a given stack or not

• Last Updated : 10 Jun, 2021

Given a stack of integers S and an array of integers arr[], the task is to check if all the array elements are present in the stack or not.

Examples:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input: S = {10, 20, 30, 40, 50}, arr[] = {20, 30}
Output: Yes
Explanation:
Elements 20 and 30 are present in the stack.

Input: S = {50, 60}, arr[] = {60, 50}
Output: Yes
Explanation:
Elements 50 and 60 are present in the stack.

Approach: The idea is to maintain the frequency of array elements in a Hashmap. Now, while the stack is not empty, keep popping the elements out from the stack and reduce the frequency of elements from the Hashmap. Finally, when the stack is empty, check that the frequency of every element in the hash-map is zero or not. If found to be true, print Yes. Otherwise, print No.

Below is the implementation of the above approach:

## C++

 `// C++ program of the above approach``#include``using` `namespace` `std;` `// Function to check if all array``// elements is present in the stack``bool` `checkArrInStack(stack<``int``>s, ``int` `arr[],``                                  ``int` `n)``{``    ``map<``int``, ``int``>freq;``    ` `    ``// Store the frequency``    ``// of array elements``    ``for``(``int` `i = 0; i < n; i++)``        ``freq[arr[i]]++;``        ` `    ``// Loop while the elements in the``    ``// stack is not empty``    ``while` `(!s.empty())``    ``{``        ``int` `poppedEle = s.top();``        ``s.pop();``        ` `        ``// Condition to check if the``        ``// element is present in the stack``        ``if` `(freq[poppedEle])``            ``freq[poppedEle] -= 1;``    ``}``    ``if` `(freq.size() == 0)``        ``return` `0;``        ` `    ``return` `1;``}` `// Driver code``int` `main()``{``    ``stack<``int``>s;``    ``s.push(10);``    ``s.push(20);``    ``s.push(30);``    ``s.push(40);``    ``s.push(50);``    ` `    ``int` `arr[] = {20, 30};``    ` `    ``int` `n = ``sizeof` `arr / ``sizeof` `arr[0];``    ` `    ``if` `(checkArrInStack(s, arr, n))``        ``cout << ``"YES\n"``;``    ``else``        ``cout << ``"NO\n"``;``}` `// This code is contributed by Stream_Cipher`

## Java

 `// Java program of``// the above approach``import` `java.util.*;``class` `GFG{` `// Function to check if all array``// elements is present in the stack``static` `boolean` `checkArrInStack(Stacks,``                               ``int` `arr[], ``int` `n)``{``  ``HashMapfreq = ``new` `HashMap();``  ` `  ``// Store the frequency``  ``// of array elements``  ``for``(``int` `i = ``0``; i < n; i++)``    ``if``(freq.containsKey(arr[i]))``      ``freq.put(arr[i], freq.get(arr[i]) + ``1``);``  ``else``    ``freq.put(arr[i], ``1``);` `  ``// Loop while the elements in the``  ``// stack is not empty``  ``while` `(!s.isEmpty())``  ``{``    ``int` `poppedEle = s.peek();``    ``s.pop();` `    ``// Condition to check if the``    ``// element is present in the stack``    ``if` `(freq.containsKey(poppedEle))``      ``freq.put(poppedEle, freq.get(poppedEle) - ``1``);``  ``}``  ``if` `(freq.size() == ``0``)``    ``return` `false``;``  ``return` `true``;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``  ``Stack s = ``new` `Stack();``  ``s.add(``10``);``  ``s.add(``20``);``  ``s.add(``30``);``  ``s.add(``40``);``  ``s.add(``50``);` `  ``int` `arr[] = {``20``, ``30``};``  ``int` `n = arr.length;` `  ``if` `(checkArrInStack(s, arr, n))``    ``System.out.print(``"YES\n"``);``  ``else``    ``System.out.print(``"NO\n"``);``}``}` `// This code is contributed by 29AjayKumar`

## Python3

 `# Python program of``# the above approach` `# Function to check if all array``# elements is present in the stack``def` `checkArrInStack(s, arr):``  ``freq ``=` `{}``  ` `  ``# Store the frequency``  ``# of array elements``  ``for` `ele ``in` `arr:``    ``freq[ele] ``=` `freq.get(ele, ``0``) ``+` `1``  ` `  ``# Loop while the elements in the``  ``# stack is not empty``  ``while` `s:``    ``poppedEle ``=` `s.pop()``    ` `    ``# Condition to check if the``    ``# element is present in the stack``    ``if` `poppedEle ``in` `freq:``      ``freq[poppedEle] ``-``=` `1``      ` `      ``if` `not` `freq[poppedEle]:``        ``del` `freq[poppedEle]``  ``if` `not` `freq:``    ``return` `True``  ``return` `False` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``  ``s ``=` `[``10``, ``20``, ``30``, ``40``, ``50``]``  ``arr ``=` `[``20``, ``30``]``  ` `  ``if` `checkArrInStack(s, arr):``    ``print``(``"YES"``)``  ``else``:``    ``print``(``"NO"``)``     `

## C#

 `// C# program of``// the above approach``using` `System;``using` `System.Collections.Generic;``class` `GFG{` `// Function to check if all array``// elements is present in the stack``static` `bool` `checkArrInStack(Stack<``int``>s,``                            ``int` `[]arr, ``int` `n)``{``  ``Dictionary<``int``,``             ``int``>freq = ``new` `Dictionary<``int``,``                                       ``int``>();``  ` `  ``// Store the frequency``  ``// of array elements``  ``for``(``int` `i = 0; i < n; i++)``    ``if``(freq.ContainsKey(arr[i]))``      ``freq[arr[i]] = freq[arr[i]] + 1;``  ``else``    ``freq.Add(arr[i], 1);` `  ``// Loop while the elements in the``  ``// stack is not empty``  ``while` `(s.Count != 0)``  ``{``    ``int` `poppedEle = s.Peek();``    ``s.Pop();` `    ``// Condition to check if the``    ``// element is present in the stack``    ``if` `(freq.ContainsKey(poppedEle))``      ``freq[poppedEle] = freq[poppedEle] - 1;``  ``}``  ``if` `(freq.Count == 0)``    ``return` `false``;``  ``return` `true``;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``  ``Stack<``int``> s = ``new` `Stack<``int``>();``  ``s.Push(10);``  ``s.Push(20);``  ``s.Push(30);``  ``s.Push(40);``  ``s.Push(50);``  ``int` `[]arr = {20, 30};``  ``int` `n = arr.Length;` `  ``if` `(checkArrInStack(s, arr, n))``    ``Console.Write(``"YES\n"``);``  ``else``    ``Console.Write(``"NO\n"``);``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``
Output:
`YES`

Time Complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up