codility上的问题 (19)Sigma 2012
题目: 像最大直方图一样给定一个数组是每个单位长度上的高度,求至少几个矩形可以拼出这个形状。
例如:给出的数组
H[0] = 8 H[1] = 8 H[2] = 5
H[3] = 7 H[4] = 9 H[5] = 8
H[6] = 7 H[7] = 4 H[8] = 8
因为可以用如上的7块可以达到要求。
输入范围: n [1..10^5] 数组种每个元素 [1..10^9]
要求复杂度 时间 空间都为O(n)。
分析: 这个问题实际上叫做skyline problem。初步想想挺复杂,其实一个贪心足以搞定。我个人觉得直方图最大矩形的那个题的思想很重要,它的思想可以解决很多问题,而且是O(n)的。我们按最大矩形的方法来想,贪心: 对每个块,考虑它左边的块,直到某一块比它矮。这中间所有块都不比它高,我们可以把这些块按照新块的高度设置一个矩形……矩形个数决定于最先那个块是比它矮,还是和她一样高。这样贪心的话,我们的矩形尽可能长,而且产生一个新块的时候无论如何我们都可能增加一个矩形,把这个矩形和左边的连起来还可能少一个矩形,所以不严格的证明,贪心是正确地。
代码:
// you can also use includes, for example:
// #include <algorithm>
int solution(const vector<int> &H) {
// write your code here...
vector<int> v;
int i, answer;
for (i = answer = 0; i < H.size(); ++i) {
while ((!v.empty()) && (v.back() > H[i])) {
v.pop_back();
}
if ((v.empty()) || (v.back() < H[i])) {
++answer;
v.push_back(H[i]);
}
}
return answer; }
codility上的问题 (19)Sigma 2012的更多相关文章
- codility上的问题 (21) Upsilon 2012
这是我目前最喜欢的codiltiy上的问题之一.问题描述是:给定一个整数数组A,所有的数均不相同.假设下标从0开始,找到一个数组B, 满足A[B[0]] > A[B[1]] > A[B[2 ...
- codility上的问题(15) Xi 2012
进入2012年的题 codility上的题目开始变难,变得有意思起来.给定两个长度在[1..300000]的只包含0和1的串S和T,它们是2进制表示的,S表示的数A不大于T表示的数B,即A<=B ...
- codility上的练习(5)
codility出了lesson 5了. (1) 合法括号序列,包括( [ { ) ] }这6种字符的字符串,长度N在[0..200000]范围内,为其是否合法. 要求时间复杂度O(N),空间复杂度O ...
- codility上的练习 (1)
codility上面添加了教程.目前只有lesson 1,讲复杂度的……里面有几个题, 目前感觉题库的题简单. tasks: Frog-Jmp: 一只青蛙,要从X跳到Y或者大于等于Y的地方,每次跳的距 ...
- codility上的问题 (23)Chi 2012
这个题也比较有意思.意思是给定一个数组A,长度为M,里面都是正整数,代表每块地形的高度.现在要测试一种加农炮,给定一个炮弹的高度H, 如果存在最小的I,满足0 < I < M,满足A[I ...
- Codility上的问题 (16) Omicron 2012
比较无聊的题,求斐波那契数的第N^M项. f(0) = 0, f(1) = 1, f(n) = f(n - 1) + f(n - 2),结果对10000103取模. N, M在[0..10^7]之间. ...
- Codility上的问题 (17) PI 2012
这个题比较简单,给定一个整数数组,对每个元素,求出和它最近比它大的数的距离(下标绝对值),如果没有比它大的数,认为距离是0. 数组元素个数 N [0..50000],数组元素范围[-10^9, +10 ...
- codility上的问题(18) Rho 2012
从正整数1开始,产生一个数列,数列中的每个数是之前出现过的任意两个数的和(可以相等),问产生正整数A,需要的数列长度至少是多少?返回这样一个最短的序列. 例如A=42 可以这样[1, 2, 3, 6, ...
- codility上的问题(34) Fluorum 2014
好久没写codility的题了.一来没时间,二来有的题目不太好分析.这个题比較有意思,我还没有给出很严格的证明.
随机推荐
- Hadoop2.4.1 MapReduce通过Map端shuffle(Combiner)完成数据去重
package com.bank.service; import java.io.IOException; import org.apache.hadoop.conf.Configuration;im ...
- Shell中变量的使用
1.变量的声明 name="blacksonny" 注意://变量定义时不加$,变量与等号之间不能有空格 变量命名规则: 首个字符必须为字母(a-z,A-Z). 中间不能有空格,可 ...
- [置顶] .net技术类面试、笔试题汇总3
今天本人从成都回到了学校,深刻认识了自己存在很多不足,在这段期间会更加努力,争取早日找到一个好工作! 41.在ASP.NET中有Button控件myButton,要是单击控件时,导航到其他页面http ...
- SPOJ 416 - Divisibility by 15(贪心)
糟烂的代码啊... 这个题目思路很简单——末位只可能为0和5,所有数字的和肯定被3整除 没有0和5的肯定不行 否则,把所有数字求和 如果被3整除,则从大到小输出 如果除3余1,则按以下顺序——删1: ...
- 设计模式17---设计模式之模板方法模式(Template Method)(行为型)
1.场景模拟 使用软件模拟登录控制,普通用户和工作人员用户,工作人员的密码在数据库中是加密的. 步骤大致如下: 前台提交,后台获取登录信息,同数据库中的登陆信息进行比较,只不过工作人员是加密的,普通用 ...
- Excel02-快速无误输入多个零
第一步:设置单元格格式-->小数位数为0,货币符号为¥ 第二步:在单元格输入数据:1**5回车即显示为¥100,000 **N 表示后面有N个零,会自动加入我们设置的货币符号¥ 这对我们在输入巨 ...
- 【VS2015正式版下载】Visual Studio 2015 正式版开放下载 Visual Studio 2015 神key
说明: 微软定于2015年7月20日发布Visual Studio 2015正式版,目前其官方网站已经提供正式版本的下载. 可在https://www.visualstudio.com/en-us/d ...
- 高级 JsRender 模板功能
转自:http://msdn.microsoft.com/zh-cn/magazine/hh975379.aspx 尽管模板很强大,但有时模板引擎提供的现成标准功能无法满足您的需求. 您可能要转换数据 ...
- dbcp写连接池 Demo
1.导包 2.准备配置文件 .properties(注:这里的参数名driverClassName.url.username等是不能改变的) 不能任意命名的原因是[你懂得] 3.Demo publ ...
- 初次窥见智能指针auto_ptr和shared_ptr
#include <memory>//shared_ptr要用的头文件 using namespace std; class A //测试auto_ptr和shared_ptr的delet ...