gpt4 book ai didi

c++ - 将最小出现次数留在堆栈底部的函数

转载 作者:行者123 更新时间:2023-11-28 01:16:28 24 4
gpt4 key购买 nike

我正在尝试编写一个堆栈,以便所有出现的最小元素都位于堆栈底部,而其他元素的顺序保持不变。例如,如果我有堆栈 [4,3,1,5,8,1,4],它将变为 [4,3,5,8,4,1,1],但我的问题是顺序发生了变化所以我会得到这样的东西[4,5,3,4,8,1,1]

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

void minstack(stack<int> &s)
{

stack<int> t1,t2;
int count=0,min;
if(!s.empty())
{

while(!s.empty())
{
if(s.top() <min)
{ min=s.top();
count=0;
}

t1.push(s.top()); s.pop();
count++;
}
for(int i = 0 ; i<count;i++)

{
s.push(min);
}

while(!t1.empty())
{
if(t1.top()!=min);
{ s.push(t1.top());
}
t1.pop();
}
}
}
int main()
{
stack <int> s;
s.push(4);
s.push(3);
s.push(1);
s.push(5);
s.push(8);
s.push(1);
s.push(4);
minstack(s);
while(!s.empty())
{
cout<<s.top()<<" "; s.pop();
}

}

最佳答案

这是一个想法。首先,我们需要找到堆栈中的最小元素。定义一个临时堆栈 t。我们现在将从 s 中一个接一个地弹出所有元素,并将它们压入 t。同时,在count中记录最小值min和pop过程中到目前为止遇到的次数。完成此操作后,请注意 t 中的元素顺序相反,并且有 mincount。现在我们将 count 个值 min 的元素推回 s。然后开始从 t 弹出并推送到 s 除了等于 min 的元素。

关于c++ - 将最小出现次数留在堆栈底部的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58570183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com