计算堆栈上弹出操作的次数,以获取C ++中数组的每个元素

给定一个数字数组和一个堆栈。数组的所有元素都在堆栈内部。目标是找到获取单个数组元素所需的弹出操作计数。

堆栈以降序填充,第一个元素为最高,顶部元素为最低。

例如

输入值

Stack [ 7,6,2,1 ] array : 2,1,6,7
输出结果
Count of number of pop operations on stack to get each element of the array
are: 3 1 0 0

说明

Traversing array from 0th index, To get 2 we will pop stack three times. So arr[0] is 3. First two pops will give 7 and 6 also. To get 1 we will pop stack once now. So arr[1] is 1. For 6 and 7 as these are already popped, so arr[2]=arr[3]=0.

输入值

Stack [ 3,2,1,1 ] array : 1,2,1,3
输出结果
Count of number of pop operations on stack to get each element of the array
are: 3 0 1 0

说明

Traversing array from 0th index, To get 1 we will pop stack three times. So arr[0] is 3. First two pops will give 3 and 2also.Traversingarray from 0th index, To get 1 we will pop stack three times. So arr[0] is 3. First two pops will give 3 and 2 also.

以下程序中使用的方法如下-

在这种方法中,我们将使用unordered_map <int,bool> um来检查元素是否已经弹出。弹出元素并将其添加到um。如果再次出现,则将弹出计数设置为0。否则,将递增计数直到我们得到它为止。

  • 取一个整数数组arr []。

  • 拿一个stack <int> stck在其中存储元素。

  • 按降序推入元素。

  • 函数pop_operations(stack <int>&stck,int arr [],int elements)返回堆栈上弹出操作数的计数,以获取数组的每个元素。

  • 将初始计数设为0。

  • 使用unordered_map <int,bool> um来存储在堆栈上执行弹出操作时遇到的唯一编号。

  • 使用for循环遍历数组。

  • 取temp = arr [i]。

  • 如果temp不在um中。要获取它,需要打印0次弹出操作。

  • 否则,在找不到温度的情况下,执行堆栈弹出并将um中弹出的每个元素设置为true和递增计数。

  • 在片刻结束时,打印计数。

  • 这样,我们将为数组的每个元素打印弹出操作的计数。

示例

#include <bits/stdc++.h>
using namespace std;
void pop_operations(stack<int>& stck, int arr[], int elements){
   int count = 0;
   unordered_map<int, bool> um;
   cout<<"获取数组中每个元素的堆栈上弹出操作的数量计数为: ";
   for (int i = 0; i < elements; ++i){
      int temp = arr[i];
      if (um.find(temp) != um.end())
      { cout << "0 "; }
      else{
         count = 0;
         while (stck.top() != temp){
            um[stck.top()] = true;
            stck.pop();
            count++;
         }
         stck.pop();
         count++;
         cout<<count<<" ";
      }
   }
}
int main(){
   int elements = 4;
   int arr[] = { 2, 1, 6, 7};
   stack<int> stck;
   stck.push(1);
   stck.push(2);
   stck.push(6);
   stck.push(7);
   pop_operations(stck, arr, elements);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出-

获取数组中每个元素的堆栈上弹出操作的数量计数为: 3 1 0 0

猜你喜欢