c++ - 找到小于或等于当前塔的先前塔的数量

标签 c++ data-structures stl stack

您好,我正在尝试查找小于或等于当前塔的先前塔的数量,此解决方案对输入(NumOfTowers)<=10 非常有效,但对于 NumOfTowers >10,代码将出现段错误,我在这里看不到问题,

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

int main()
{
    std::stack<int> Towers;    //for storing the Height of the towers
    std::stack<int> TempTowers; // Temrory buffer stack
    std::stack<int> CountTowers; //for storing the count of all previous  
                                   towers less than the current one
    unsigned int NumTestCases,NumOfTowers,i,j,count=1,temp,temp_height;
    cin>>NumTestCases;
    cin>>NumOfTowers;


    while(NumTestCases){

        while(!Towers.empty()){
            Towers.pop();
        }
       for(i=0;i<NumOfTowers;i++){
           cin>>temp;
           Towers.push(temp);
       }
       for(i=0;i<NumOfTowers-1;i++){
           count=1;
           temp_height=Towers.top();
           Towers.pop();
           temp=Towers.top();

           while(temp<temp_height){
               count++;
               TempTowers.push(temp);
               Towers.pop();
               temp=Towers.top();
           }

            CountTowers.push(count);

            while(!TempTowers.empty()){
                temp=TempTowers.top();
                TempTowers.pop();
                Towers.push(temp);
           }

       }       
       NumTestCases--;
       cout<<"1"<<" ";
       while(!CountTowers.empty()){
           cout<<CountTowers.top()<<" ";
           CountTowers.pop();
       }
       cout<<"\n";
    }

}

任何帮助都会很棒。

最佳答案

改变这个

while(temp<temp_height){
               count++;
               TempTowers.push(temp);
               Towers.pop();      // Popped the last element
               temp=Towers.top(); // no more elements left
           }

对此

while(!Towers.empty() && Towers.top() < temp_height)
{
  ++count;
  TempTowers.push(Towers.top());
  Towers.pop();
}

问题不在于输入的长度,而在于输入的顺序。如果 I/p = {1, 2, 3, 4} 您的代码在尝试访问空堆栈的 top() 时会出错。

关于c++ - 找到小于或等于当前塔的先前塔的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46883974/

相关文章:

c++ - 在公共(public)方法中插入映射(私有(private)属性)后出现段错误

c++ - 指向未知边界数组的指针?

c++ - unordered_set 是用于存储 vector<int> 元素的适当数据结构吗?如果是这样,我将如何着手实现哈希函数?

c++ - 如何在 multimap 中按排序顺序打印键的值

c++ - 在 MSVC++ 的 STL 中插入 std::unordered_map 两次调用散列函数,糟糕的设计还是特殊原因?

c++ - QT : Passing QString to QThread

c++ - 为 Arduino 编写自定义类时出现错误 'does not name type'

c++ - 解决 C++ 中的最小交换 hackerrank 问题

performance - 查找数字的最快方法是什么?

linux - Visual Studio Express 2010 与 Linux gcc-4.3.2 上的 STL