c++ - 在 O(1) 时间内找到堆栈中的最小元素 C++
问题描述
在这里,我使用mini()
函数查找堆栈中的最小元素。在堆栈中推送和弹出时,我设置min1
和min2
逻辑。在哪些情况下我的代码会失败?我的代码有什么问题?
push 函数集min1
和min2
变量。min1
对应于最小元素并min2
对应于堆栈中的第二个最小元素。在弹出中,如果弹出的元素等于 mini,那么我min1
在弹出之前更新到第二个最小值并继续。所以在任何时候min1
都在堆栈中具有最小的价值。
class stac
{
public:
void push(int item)
{
if(top>=STACK_SIZE-1)
{
cout<<"Full"<<endl;
return;
}
else
{
if(item<min1)
{
min2 = min1;
min1=item;
}
s[++top]=item;
return;
}
}
void pop()
{
if(top==-1)
{
cout<<"Empty"<<endl;
return;
}
else
{
if(s[top]==min1)
{
min1=min2;
}
top--;
return;
}
}
void mini()
{
if(top==-1)
{
cout<<"no minimum"<<endl;
return;
}
else
{
cout<<min1<<endl;
}
}
private:
int min1 = INT_MAX;
int min2;
int s[STACK_SIZE];
int top = -1;
};
int main()
{
stac s1;
s1.push(5);
s1.push(2);
s1.push(9);
s1.push(1);
s1.push(24);
s1.push(-1);
s1.push(-87);
s1.push(23);
s1.mini();
s1.display();
return 0;
}
解决方案
如果您可以将其他元数据作为堆栈中数据的一部分,您可以将在该点之前遇到的最少数据存储在元数据中。无论您弹出多少元素,堆栈顶部的元数据都将具有最小值。
推荐阅读
- python - 无法为 Python 3 安装 Python 虚拟环境
- gemfire - 通过 rest api 更新 Gemfire 中的序列化对象
- powershell - 如何比较 power-shell 中的两个文本文件并将差异发送到电子邮件
- jmeter - java.net.connectException:连接被拒绝 perfmon jmeter
- sapui5 - UI5 sap.m.ColumnListItem 繁忙的属性不起作用(可能的错误?)
- ios - 修复 iOS 中的多个按钮单击事件?
- c# - Xamarin.iOS 中的静音
- jquery - 选择器是:可见不起作用
- azure - 无连接的 Azure 逻辑应用
- kubernetes - 多个 pod 如何将单独的卷映射到同一个 Azure 磁盘?