庞果网直方图中面积最大问题ruby解答
2013-11-28 23:38
337 查看
题目地址:http://hero.pongo.cn/Question/Details?ID=58&ExamID=56
题目详情
给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。
如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]:
![](http://hire.pongo.cn/hero/getimg/36)
那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位。
![](http://hire.pongo.cn/hero/getimg/37)
请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度= [2,1,5,6,2,3] ,返回10。
思路比较简单:
首先对于每一个block, 分为将直方图分为左右两个部分,然后找到可以画阴影的部分的最左最右边在数组中的位置。
然后算出面积, 最终比较得出最大值。
还是翠花, 给客人上代码了。
题目详情
给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。
如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]:
那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位。
请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度= [2,1,5,6,2,3] ,返回10。
思路比较简单:
首先对于每一个block, 分为将直方图分为左右两个部分,然后找到可以画阴影的部分的最左最右边在数组中的位置。
然后算出面积, 最终比较得出最大值。
还是翠花, 给客人上代码了。
def initialize(array) @array = array end def largest_rectangle_area max_area = 0 @array.each_index do |i| right_blocks = @array[(i + 1)...@array.count] right_position = (right_blocks.index{|block_height| block_height < @array[i]} || right_blocks.count) + i left_blocks = @array[0...i] if left_position = left_blocks.rindex{|block_height| block_height < @array[i]} left_position += 1 else left_position = 0 end area_width = right_position - left_position + 1 area = area_width * @array[i] max_area = area if area > max_area end max_area end end describe Histogram do it "should be 10 if height array is [2,1,5,6,2,3] " do Histogram.new([2,1,5,6,2,3]).largest_rectangle_area.should == 10 end it "should be 8 if height array is [2,2,2,2] " do Histogram.new([2, 2, 2, 2]).largest_rectangle_area.should == 8 end it "should be 9 if height array is [1,2,3,4, 5] " do Histogram.new([1,2,3,4, 5]).largest_rectangle_area.should == 9 end end
相关文章推荐
- ruby 一些简单的例子
- Ruby 之 class 中的 private、 protected、public
- 比较详细的ruby symbol 学习资料
- ruby 数组使用教程
- ruby 异常处理:ensure
- Ruby self在不同环境的含义
- 初步了解一下什么是ruby
- ruby 异常处理:rescue
- ruby 单态方法 分析
- Ruby 魔法 学习笔记之一
- ruby 过程对象 解析
- ruby will_paginate的用法
- Ruby进行文件信息输出实例代码
- ruby 小脚本搞定CVS服务器更换后checkout下来的工程迁移
- ruby 流程控制 方法
- ruby 类常量 解析
- ruby 对象的初始化 方法
- print不自动换行,puts会自动换行第1/2页
- Ruby语言中的String深入理解
- ruby 迭代器使用方法