加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

找最大矩形面积的巧妙算法

(2016-10-22 01:06:00)
分类: 算法
今天挺happy,看到一个特别好玩的算法,看了半天还是不咋懂,这里要感谢教研室的李工(人家拿高工资是有道理的),幸亏他带我看了一遍程序,先把题目的链接放在这里:矩形面积
    http://s6/mw690/004igrvszy75NOXMRz705&690

这是原题,用一个列表存储就好了:[(0,2),(1,1),(2,5),(3,6),(4,2),(5,3),(6,4),(7,6),(8,6),(9,2),(10,1)]
代码和结果如下:
http://s12/mw690/004igrvszy75NPc40Qjab&690

http://s1/mw690/004igrvszy75NPdmg4Ee0&690

里面最精髓的就是数据结构的栈,栈的主要特点是后进先出,而队列是先进先出,以下这张图就很生动:
http://s6/mw690/004igrvszy75NPvJtSRa5&690

我只能说这个算法好秒的,在我们读取bar的时候,遇到高度上升时就append进入栈,直到遇到高度下降的bar,此时开始做一个循环,不断的pop,也就是弹出栈,弹的同时记下索引index和宽度,计算面积,并在max函数中找一次最值。此时若还没到最后一个bar,前面的bar已经被pop出栈了,相当于又开始新的最大面积寻找了。
   这个算法真的不错,在程序中我家了一些栈顶,索引和高度的显示,主要是用于理解程序的结构和算法的思想的。
   好了,又到寝室夜谈时间了,先去happy了。。。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有