Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số hoạt động bật trên ngăn xếp để nhận từng phần tử của mảng trong C ++


Cho một mảng số và một ngăn xếp. Tất cả các phần tử của mảng đều có bên trong ngăn xếp Mục tiêu là tìm số lượng các phép toán bật lên cần thiết để nhận các phần tử mảng riêng lẻ.

Ngăn xếp được lấp đầy theo thứ tự giảm dần, phần tử đầu tiên là cao nhất và phần tử trên cùng là thấp nhất.

Ví dụ

Đầu vào

Stack [ 7,6,2,1 ] array : 2,1,6,7

Đầu ra

Count of number of pop operations on stack to get each element of the array
are: 3 1 0 0

Giải thích

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.

Đầu vào

Stack [ 3,2,1,1 ] array : 1,2,1,3

Đầu ra

Count of number of pop operations on stack to get each element of the array
are: 3 0 1 0

Giải thích

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 2 also.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 2 also.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -

Trong cách tiếp cận này, chúng ta sẽ sử dụng một hàm chưa có thứ tự_map um để kiểm tra xem phần tử đã được xuất hiện hay chưa. Phần tử pop và thêm nó vào ô. Nếu nó xuất hiện lần nữa thì hãy đặt số lần bật lên là 0. Nếu không thì hãy đếm số gia tăng cho đến khi chúng tôi nhận được nó.

  • Lấy một mảng số nguyên arr [].

  • Lấy một ngăn xếp stck để lưu trữ các phần tử trong đó.

  • Đẩy các phần tử trong đó theo thứ tự giảm dần.

  • Hàm pop_operations (stack &stck, int arr [], int element) trả về số lượng các phép toán pop trên ngăn xếp để lấy từng phần tử của mảng.

  • Lấy số lượng ban đầu là 0.

  • Hãy dùng unardered_map um để lưu trữ các số duy nhất gặp phải khi thực hiện các thao tác bật lên trên ngăn xếp.

  • Traverse mảng sử dụng vòng lặp for.

  • Lấy temp =arr [i].

  • Nếu nhiệt độ không ở trong um. In 0 thao tác pop cần thiết để lấy nó.

  • Nếu không, trong khi không tìm thấy tạm thời, hãy thực hiện bật trên ngăn xếp và đặt từng phần tử xuất hiện trong ô là đúng và số gia tăng.

  • Vào cuối thời gian, hãy đếm số bản in.

  • Bằng cách này, chúng tôi sẽ in ra số lượng các phép toán pop cho mỗi phần tử của mảng.

Ví dụ

#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<<"Count of number of pop operations on stack to get each element of the array are: ";
   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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of number of pop operations on stack to get each element of the array are: 3 1 0 0