1.最小栈的双栈实现方法
一个栈用于存储数据,另一个存储当前的最小值,两个栈同步操作即可
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
stack_data.push(x);
if(stack_min.empty())
stack_min.push(x);
else
{
if(stack_min.top()<x)
stack_min.push(stack_min.top());
else
stack_min.push(x);
}
}
void pop() {
stack_data.pop();
stack_min.pop();
}
int top() {
return stack_data.top();
}
int getMin() {
return stack_min.top();
}
private:
stack<int> stack_data;
stack<int> stack_min;
};
2.打乱数组的随机方法
for(int i=0;i<nums.size();++i)
{
int random_i=rand()%nums.size();
swap(nums[i],nums[random_i]);
}
本文介绍了一种使用双栈实现最小值栈的方法,其中一个栈存储数据,另一个存储最小值,确保了O(1)的时间复杂度获取最小元素。此外,还探讨了一种简单有效的数组随机化算法,通过遍历数组并随机交换元素,实现了数组的均匀打乱。
231

被折叠的 条评论
为什么被折叠?



