题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))
解题思路
维持两个数据,一个用来按顺序存放push进来的数据,一个用来存放存进来的数据排序后的结果,对应的就可以返回在O(1)的情况下返回min的结果了(返回排序后的第一个值就是最小值)。
具体代码如下:
class Solution
{
private:
vector<int> data{};
vector<int> sorted_data{};
public:
void push(int value)
{
data.push_back(value);
sorted_data.push_back(value);
sort(sorted_data.begin(), sorted_data.end());
return;
}
void pop()
{
if (!data.empty())
{
int tmp = data.back();
data.pop_back();
auto i = find(sorted_data.begin(), sorted_data.end(), tmp);
sorted_data.erase(i);
}
else
{
cout << "the stack is empty!" << endl;
}
return;
}
int top()
{
return data.back();
}
int min()
{
if (!sorted_data.empty())
return sorted_data.front();
else
cout << "the stack is empty" << endl;
return -1;
}
void show()
{
cout << " data :";
for (auto x : data)
cout << x << ' ';
cout << endl;
cout << "sorted_data: ";
for (auto x : sorted_data)
cout << x << ' ';
cout << endl;
}
};