(试题)实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

标签: c++ 栈和队列
160人阅读 评论(0) 收藏 举报
分类:

思路分析

1、使用同一个栈,采取多次入栈出栈法
元素x入栈时,先push(x),然后push(min);
ps:min表示当前所在栈所有元素中的最小值
元素出栈时,则执行两次pop();

但此方法的不妥之处在于若入栈的元素数组为单调递增的,则每次需要push同一个值,此为操作冗余。

2、使用两个栈,比较入栈出栈法
使用两个栈s1、s2,s2用于压入最小值;
当元素x入栈时,将x与s2栈顶元素相比较,如果x

代码实现

template<class T>
class MinStack
{
public:
    MinStack()
    {}

    ~MinStack()
    {}

    void Push(const T& x)
    {
        if (s2.empty())
        {
            s1.push(x);
            s2.push(x);
        }
        else
        {
            if (x < s2.top())
                s2.push(x);
            s1.push(x);
        }

    }

    void Pop()
    {
        if (s2.empty())
        {
            return;
        }
        else
        {
            if (s1.top() == s2.top())
            {
                s2.pop();
            }
            s1.pop();
        }
    }

    T& Min()
    {
        if (!s2.empty())
        {
            return s2.top();
        }
    }

    void Print()
    {
        while (!s1.empty())
        {
            cout << s1.top() << ' ';
            s1.pop();
        }
        cout << endl;
    }

private:
    stack<T> s1;
    stack<T> s2;
};

测试用例

void Test3()
{
    MinStack<int> s1;
    s1.Push(1);
    s1.Push(2);
    s1.Push(3);
    s1.Push(4);
    s1.Push(5);


    s1.Pop();
    s1.Pop();
    s1.Pop();
    s1.Print();

    cout<<s1.Min();

}

实现结果

这里写图片描述

查看评论

实现一个栈,要求push(入栈),pop(出栈),min(返回栈中的最小值)的时间复杂度为O(1);

1. 栈的基本操作       入栈(push);       出栈(pop);       查找栈顶(top);       栈的元素个数(size);       检查栈是否为空(emp...
  • tp93125334
  • tp93125334
  • 2016-07-30 22:11:11
  • 909

JavaScript实现一个简单数据结构栈

我们将创建一个类来表示栈。首先声明这个类: 接着我们需要一种数据结构来保存栈中的元素。可以选择数组,接下来,为我们的栈声明一些方法。 push(element): 添加新元素到栈顶 pop(): 移除...
  • tian_123456789
  • tian_123456789
  • 2017-09-27 18:15:32
  • 124

【每日一题】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

这道题有两种实现方式 方法一:用两个栈来实现 两个栈实现的主要思路是,一个栈存放数据,一个栈存放最小值。 压栈操作: (1)我们先向S1压栈一个数据 (2)再向S1压入第二个数据,如果此...
  • ArchyLi
  • ArchyLi
  • 2017-07-22 14:45:03
  • 947

~实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)~

~实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)~...
  • manongdeyipiant
  • manongdeyipiant
  • 2017-04-15 22:51:56
  • 418

实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)

实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)...
  • x_y_r129
  • x_y_r129
  • 2016-03-11 11:57:39
  • 3317

实现一个栈Stack,要求实现Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)

Hello,大家好,今天Val来给大家分享,关于如何实现一个栈,让它的push、pop、返回最小值min的时间复杂度为O(1)。基本算法思想1.实现主要内容:   创建一个MyStack类,类中用两...
  • ValDC_Morning
  • ValDC_Morning
  • 2017-08-13 20:17:23
  • 221

【数据结构】实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) 在栈中操作的话,push和pop的时间复杂度就是O(1),所以我们只用实现Min(返回...
  • liuxiaoqian_
  • liuxiaoqian_
  • 2015-10-31 16:46:37
  • 2241

【每日一题】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、 Min(返回最小值的操作)的时间复杂度为O(1)

题目:实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、 Min(返回最小值的操作)的时间复杂度为O(1) 解决方法:使用两个栈_data和_min,_min做为辅助栈(每次压入_mi...
  • gaoruxue918
  • gaoruxue918
  • 2017-07-20 12:23:04
  • 185

实现pop push min操作时间复杂度为O(1)的栈结构

要求:实现一个栈结构 使得pop push min(获得栈中最小元素)操作的时间复杂度为O(1) 要实现min函数复杂度为O(1) 肯定不能遍历弹入的数据也不能简单维护一个小顶堆(小顶堆的维护需要lg...
  • WUDAIJUN
  • WUDAIJUN
  • 2012-12-27 00:13:44
  • 6738

实现一个栈,要求Push/Pop/Min(返回最小值)的时间复杂度为O(1)

题目:实现一个栈,要求Push/Pop/Min(返回最小值)的时间复杂度为O(1) #pragma once #include //实现一个栈,要求实现Push/Pop/Min...
  • qq1010234991
  • qq1010234991
  • 2016-07-04 19:09:34
  • 203
    个人资料
    持之以恒
    等级:
    访问量: 4568
    积分: 287
    排名: 27万+