试题名称: 最大的矩形

时间限制: 1.0s

内存限制: 256.0MB

问题描述: 

问题描述
  在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。


  请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。

输入格式
  第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。
  第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。
输出格式
  输出一行,包含一个整数,即给定直方图内的最大矩形的面积。
样例输入
6
3 1 6 5 2 3
样例输出
10

解题思路: 

代码如下(java):

  1. package ccf_text2013_12;
  2.  
  3. import java.util.Scanner;
  4. /**
  5. * 最大的矩形
  6. * @author Hello stranger
  7. *
  8. */
  9. public class BiggestRectangle {
  10.  
  11. public static void main(String[] args) {
  12.  
  13. new BiggestRectangle().run();
  14.  
  15. }
  16.  
  17. private void run() {
  18.  
  19. Scanner fin = new Scanner(System.in);
  20.  
  21. int N = fin.nextInt();
  22.  
  23. int[] height = new int[N];
  24.  
  25. for(int i = 0; i < N; i++){
  26.  
  27. height[i] = fin.nextInt();
  28.  
  29. }
  30.  
  31. //long start = System.nanoTime(); //获取当前系统毫秒值
  32.  
  33. int result = 0;
  34.  
  35. for(int i = 0; i < N; ++i){
  36.  
  37. int width = 1;
  38.  
  39. for(int j = i - 1; j >= 0; --j){
  40.  
  41. if(height[j] >= height[i]){
  42.  
  43. ++width;
  44.  
  45. }else{
  46.  
  47. break;
  48. }
  49. }
  50.  
  51. for(int j = i + 1; j < N; ++j){
  52.  
  53. if(height[j] >= height[i]){
  54.  
  55. ++width;
  56.  
  57. }else{
  58.  
  59. break;
  60. }
  61. }
  62.  
  63. int area = width * height[i];
  64.  
  65. result = Math.max(result, area);
  66. }
  67.  
  68. System.out.println(result);
  69.  
  70. //long end = System.nanoTime();
  71.  
  72. //System.out.println((end - start)/1.0e9 +"s");
  73. }
  74.  
  75. }

另一个失败代码(java)

  1. package ccf_text2013_12;
  2.  
  3. import java.util.Scanner;
  4. /**
  5. * 最大的矩形2(时间不符合)
  6. * @author Hello stranger
  7. *
  8. */
  9. public class BiggestRectangle2 {
  10.  
  11. public static void main(String[] args) {
  12.  
  13. new BiggestRectangle2().run();
  14.  
  15. }
  16.  
  17. private void run() {
  18.  
  19. Scanner fin = new Scanner(System.in);
  20.  
  21. int N = fin.nextInt();
  22.  
  23. int[] height = new int[N];
  24.  
  25. for(int i = 0; i < N; i++){
  26.  
  27. height[i] = fin.nextInt();
  28.  
  29. }
  30.  
  31. int result = 0;
  32.  
  33. int maxArea = 0;
  34.  
  35. for(int i = 0; i < N; ++i){
  36.  
  37. int high = height[i];
  38.  
  39. for(int j = i + 1; j < N; j++){
  40.  
  41. int width = j - i;
  42.  
  43. if(high > height[j]){
  44.  
  45. high = height[j];
  46.  
  47. width++;
  48.  
  49. result = high * width;
  50.  
  51. }
  52. if(maxArea < result){
  53.  
  54. maxArea = result;
  55. }
  56. }
  57.  
  58. }
  59.  
  60. System.out.println(maxArea);
  61.  
  62. }
  63.  
  64. }

CCF系列之最大的矩形(201312-3)的更多相关文章

  1. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  2. CCF系列奖获奖名单公布,鲍虎军、周志华获CCF王选奖 | CNCC 2017

    本文讲的是CCF系列奖获奖名单公布,鲍虎军.周志华获CCF王选奖 | CNCC 2017, 由中国计算机学会(CCF)主办,福州市人民政府.福州大学承办,福建师范大学.福建工程学院协办的2017中国计 ...

  3. CCF真题之最大矩形

    201312-3 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方图.例如,下图中六个矩形的高度就分别是3, 1, 6 ...

  4. C# JackLib系列之GdiHelper圆角矩形的快速生成

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  5. CCF系列之最优灌溉(201412-4)

    试题编号:201412-4试题名称:最优灌溉时间限制: 1.0s内存限制: 256.0MB 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来 ...

  6. CCF系列之画图(201409-2)

    试题编号: 201409-2试题名称: 画图时间限制: 1.0s内存限制: 256.0MB问题描述: 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从 ...

  7. CCF系列之窗口(201403-2)

    试题编号: 201403-2时间限制: 1.0s 内存限制: 256.0MB 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口 ...

  8. CCF系列之模板生成系统( 201509-3 )

    试题名称: 模板生成系统 试题编号: 201509-3 时间限制: 1.0s 内存限制: 256.0MB 问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的 ...

  9. CCF模拟题 最大的矩形

    最大的矩形 时间限制: 1.0s 内存限制: 256.0MB     问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方 ...

随机推荐

  1. [js高手之路]html5 canvas动画教程 - 重力、摩擦力、加速、抛物线运动

    上节,我们讲了匀速运动,本节分享的运动就更有意思了: 加速运动 重力加速度 抛物线运动 摩擦力 加速运动: <head> <meta charset='utf-8' /> &l ...

  2. TP框架设置的LOG_LEVEL不起作用

    最近监控系统日志,可是日志是全部级别的日志,没有办法看太多了.只想看有用的信息. 就在config文件中修改了配置文件.可是试了以后并没有变化,log文件还是全部级别的信息. 后来发现调试模式开启着, ...

  3. Micropython教程之TPYBoard制作蓝牙+红外循迹小车

    1.实验目的 学习在PC机系统中扩展简单I/O接口的方法. 进一步学习编制数据输出程序的设计方法. 学习蓝牙模块的接线方法及其工作原理. 学习L298N电机驱动板模块的接线方法. 学习蓝牙控制小车的工 ...

  4. React学习之路(二)

    状态(state) 状态就是组件描述某种显示情况的数据,由组件自己设置和更改,也就是所组件自己维护,目的就是为了在不同状态下使组件的显示不同 在组件中只能通过getInitialState的钩子函数来 ...

  5. Geohash-》通过经纬度计算两地距离的函数

    /**      * 根据起点坐标和终点坐标测距离      * @param  [array]   $from  [起点坐标(经纬度),例如:array(118.012951,36.810024)] ...

  6. H5前端性能测试总结

    测试关注指标 Http请求个数 同一个域名不同浏览器内核.不同版本浏览器,大部分并发请求数是6个: 优化方案: a.雪碧图:即CSS Sprite,也称CSS精灵,是一种CSS图像合并技术,该方法是将 ...

  7. Unity3d 复制文字到剪切板及存储图像到相册

    游戏中里开发分享功能时用到两个小功能:1.复制一个链接到剪切板供在其他应用粘贴分享使用,2.保存一张二维码图像到相册供发送给其他应用用于分享.但是在unity中无法完成,需要分别开发相应的插件. An ...

  8. CSS属性:背景属性(图文详解)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. background系列属性 常见背景属性 CSS样式中,常见的背景属性 ...

  9. [转载]innodb 的预读

    innodb在io的优化上有个比较重要的特性为预读,innodb以64个page为一个extent,那么innodb的预读是以page为单位还是以extent? 这样就进入了下面的话题:linear ...

  10. 记录:使用rpm安装JDK

    从这个地址下载rpm文件http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.ht ...