我是靠谱客的博主 灵巧发卡,最近开发中收集的这篇文章主要介绍CCF认证模拟之最大的矩形,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

引言

Today is A good day!心情大好,所以连发博客,记录一下自己苦苦鏖战准备CCF的血泪史ᕙ[・۝・]ᕗ好,这篇是官网模拟题的第三题,最大的矩形

题目

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
问题描述   在横轴上放了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

这里写图片描述

这里写图片描述

解题思路

这个解决起来还是比较棘手的。关键在于怎么样才能获取到最大的那个矩形==。为了这个,我也是纠结了老半天,最后没办法只好看看网上大神怎么说。最后在结合了几篇博文的深入骨髓的洗礼之后,偶终于懂得了这道题的精华所在,特此记录下来。这个算法的思路是这样的,也算是一种穷举算法(但穷举之外还隐含着分治的思想)吧:以某个矩形为基础,分两个方向(分治)遍历,只要找到比它自己的面积大的矩形就继续遍历,因为这样才能最终得到最大的矩形。如果找到的矩形面积比它自己小,就break;如此以来最后最大的矩形面积就是这个矩形的高 * 遍历的宽度(这个宽度当然是前后两个方向遍历的总宽度width)。 当然对每个矩形都需要做相同的遍历,最后取最大的。

代码

  • 截图:
    这里写图片描述

OK

这样子就好啦,把类名改成Main,提交,第三个“100分”到手!!!
♪(´ε`)

最后

以上就是灵巧发卡为你收集整理的CCF认证模拟之最大的矩形的全部内容,希望文章能够帮你解决CCF认证模拟之最大的矩形所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部