通过辅助栈的来回装,使得主栈一直是一个排好序的状态。
class SortedStack {
public:
stack<int>sortedstack={};
stack<int>temp={};
SortedStack() {
//temp.push(1);
}
void push(int val) {
//temp.push(sortedstack.top());
while(!sortedstack.empty()&&val>sortedstack.top()){
temp.push(sortedstack.top());
sortedstack.pop();
}
sortedstack.push(val);
while(!temp.empty()){
sortedstack.push(temp.top());
temp.pop();
}
}
void pop() {
if(sortedstack.empty())return;//这个不写会导致超时,焯!
sortedstack.pop();
}
int peek() {
if(sortedstack.empty())return -1;//这个有时候会忘记写,焯!
return sortedstack.top();
}
bool isEmpty() {
return sortedstack.empty();
}
};
/**
* Your SortedStack object will be instantiated and called as such:
* SortedStack* obj = new SortedStack();
* obj->push(val);
* obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->isEmpty();
*/
我还是不明白为啥我这个会报错,难道是不打!的empty函数不能用?我不理解。。。
class SortedStack {
public:
stack<int>sortedstack={};
stack<int>temp={};
SortedStack() {
//temp.push(1);
}
void push(int val) {
if(sortedstack.empty()){//这玩意是唯一的区别
sortedstack.push(val);
return;}
//temp.push(sortedstack.top());
while(val>sortedstack.top()){
temp.push(sortedstack.top());
sortedstack.pop();
}
sortedstack.push(val);
while(!temp.empty()){
sortedstack.push(temp.top());
temp.pop();
}
}
void pop() {
if(sortedstack.empty())return;//这个不写会导致超时,焯!
sortedstack.pop();
}
int peek() {
if(sortedstack.empty())return -1;//这个有时候会忘记写,焯!
return sortedstack.top();
}
bool isEmpty() {
return sortedstack.empty();
}
};
/**
* Your SortedStack object will be instantiated and called as such:
* SortedStack* obj = new SortedStack();
* obj->push(val);
* obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->isEmpty();
*/
Line 175: Char 16: runtime error: reference binding to misaligned address 0xbebebebebebec0ba for type ‘int’, which requires 4 byte alignment (stl_deque.h)
0xbebebebebebec0ba: note: pointer points here
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/…/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/bits/stl_deque.h:180:16