• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

MarkGrid

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

如何保证栈的pop/push/get_min的效率同时满足是O(1)?

注:get_min为最小值,是动态的,也就是说,每次的pop或push都取的是当前栈内元素的最小值。

解决方案:

设置两个栈,一个为原始数据栈S1,一个为最小值栈S2。

push操作 -- 复杂度为O(1):

开始时,push数据D1到S1,同时对比S2中的栈顶元素TD2,只有D1<topdata时才将D1 push到S2;

接着push其他数据Dn...

pop操作 -- 复杂度为O(1):

每次pop S1时(假设为TD1),先与S2的TD1比较,只有TD1<=TD2时,将TD2从S2中pop;

 

get_min -- 复杂度为O(1):

直接pop S2的栈顶元素TD2即为S1的当前最小值。

 

当然,这里的S2也可以是一个数组。

 

BTW: 欢迎各位同学分享自己的算法哈。

posted on 2013-06-19 09:50  MarkGrid  阅读(300)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3