今天发现又出了lesson 3...

不过题目都很简单……

(1) Min-avg-slice

给定一个长度为n的整数数组,找到一个连续的子数组,数组元素的平均值最小。 数据范围N [1..10^5],数组元素范围[-10^4, +10^4]。

要求复杂度: 时间O(N),空间O(N)。

分析: 就是求最小值……因为如果拉进别的数,平均值会增大,干嘛搞成这样,空间可以O(1)。说得神乎其神的……

代码:

// you can also use includes, for example:
// #include <algorithm>
int solution(vector<int> &A) {
// write your code here...
int i,j,n = A.size();
for (i = j = 0; i < n; ++i) {
if (A[i] < A[j]) {
j = i;
}
}
return A[j];
}

(2) Passing-cars

给定一个长度为N的0-1数组A,它表示一条路上的车流方向,下标从0开始,要找到0<=P<=Q<N,并且A[P] = 0, A[Q] = 1的下标对数。数据范围N [1..10^5]。

要求复杂度: 时间O(N),空间O(1)。

分析: 实质对于每个0,我们求它后面有多少个1即可。所以我们倒着遍历数组,对每个0,看一下截止到目前为止的后缀和即可。

代码:

// you can also use includes, for example:
// #include <algorithm>
int solution(vector<int> &A) {
// write your code here...
int i,sum,answer;
for (answer = sum = 0, i = A.size() - 1; i >= 0; --i) {
if (A[i]) {
++sum;
}
else if ((answer += sum) > 1000000000) {
return -1;
}
}
return answer;
}

(3) Genomic-range-query

给定一个字符串,代表基因,只包含ACGT,4个字符,假设它们分别代表整数1,2,3,4,再给定M个查询P,Q, (P[i],Q[i])表示从查询原串下标P[i]到Q[i]之间的最小值,字符串长度N [1..10^5],查询个数M [1..50000]。要求复杂度 时间O(N + M),空间O(N)。

分析: 本来是线段树的题目,但是因为只有4种值,所以我们可以记录下前n项1,2,3,4分别出现了多少次,这样通过减法,我们就知道查询段内每个数出现的次数,自然知道最小值了。

代码:

// you can also use includes, for example:
// #include <algorithm>
vector<int> solution(string &S, vector<int> &P, vector<int> &Q) {
// write your code here...
vector<vector<int> > have;
int i,j,n = S.size();
have.resize(n + 1);
have[0].resize(4, 0);
for (i = 1; i <= n; ++i) {
have[i] = have[i - 1];
switch(S[i - 1]) {
case 'A':
++have[i][0];
break;
case 'C':
++have[i][1];
break;
case 'G':
++have[i][2];
break;
case 'T':
++have[i][3];
break;
}
}
n = P.size();
vector<int> answer;
answer.resize(n);
for (i = 0; i < n; ++i) {
for (j = 0; j < 4; ++j) {
if (have[Q[i] + 1][j] - have[P[i]][j]) {
answer[i] = j + 1;
break;
}
}
}
return answer; }

codility上的练习(3)的更多相关文章

  1. codility上的练习 (1)

    codility上面添加了教程.目前只有lesson 1,讲复杂度的……里面有几个题, 目前感觉题库的题简单. tasks: Frog-Jmp: 一只青蛙,要从X跳到Y或者大于等于Y的地方,每次跳的距 ...

  2. codility上的问题(15) Xi 2012

    进入2012年的题 codility上的题目开始变难,变得有意思起来.给定两个长度在[1..300000]的只包含0和1的串S和T,它们是2进制表示的,S表示的数A不大于T表示的数B,即A<=B ...

  3. codility上的练习(5)

    codility出了lesson 5了. (1) 合法括号序列,包括( [ { ) ] }这6种字符的字符串,长度N在[0..200000]范围内,为其是否合法. 要求时间复杂度O(N),空间复杂度O ...

  4. codility上的问题(34) Fluorum 2014

    好久没写codility的题了.一来没时间,二来有的题目不太好分析.这个题比較有意思,我还没有给出很严格的证明.

  5. codility上的问题 (19)Sigma 2012

    题目: 像最大直方图一样给定一个数组是每个单位长度上的高度,求至少几个矩形可以拼出这个形状. 例如:给出的数组 H[0] = 8 H[1] = 8 H[2] = 5 H[3] = 7 H[4] = 9 ...

  6. codility上的问题 (21) Upsilon 2012

    这是我目前最喜欢的codiltiy上的问题之一.问题描述是:给定一个整数数组A,所有的数均不相同.假设下标从0开始,找到一个数组B, 满足A[B[0]] > A[B[1]] > A[B[2 ...

  7. codility上的问题 (23)Chi 2012

    这个题也比较有意思.意思是给定一个数组A,长度为M,里面都是正整数,代表每块地形的高度.现在要测试一种加农炮,给定一个炮弹的高度H, 如果存在最小的I,满足0 < I <  M,满足A[I ...

  8. codility上的问题 (22)

    问题描述: 用1 * 1, 1 * 2的矩形覆盖一个n行m列的矩形,问有多少种方法. 数据范围 : n [1..10^6],  m [ 1..7] 要求复杂度: 时间  O(log(n) * 8 ^m ...

  9. codility上的问题(26) Hydrogenium 2013

    题目,挺无聊的.一个裸的最短路.n个点,你住在0,要去买东西,每个点有一个关门时间,问能最早买到食物的时间.有两点注意 (1)有重边 (2) 原图是dicrect连接...但不是有向边,被这个误导了. ...

随机推荐

  1. Android中动态更新TextView上的文字

    示例代码: 1.新线程,定时更新文字 class testThread extends Thread{ public void run() { Message message = new Messag ...

  2. jsp执行数据库查询并分页

    需求: 有一批企业的基本信息需要展示出来,要求一级页以列表形式展示企业清单,点击公司名称后进入二级页面,二级页面展示企业简介和几张图片. 实现效果: 开发环境: Win7,Eclipse,Mysql ...

  3. usb mass storage之旅

    前面总结了usb hid keyboard,现在总结usb mass storage,在枚举阶段没什么好总结的,hid和mass storage差不多,都是同样的枚举过程,但是在他们的配置描述符.接口 ...

  4. Roy the Robber

    Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that th ...

  5. Grunt制作个人博客简集

    原文:http://www.gbtags.com/gb/share/4916.htm GitHub地址:http://yansm.github.io/fromone/

  6. HDU1754(线段树)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  7. 手动调整导航控制器中的viewcontroller

    NSMutableArray *array = [[NSMutableArray alloc]initWithArray: [self.navigationController viewControl ...

  8. OpenStack 部署总结之:在CentOS 6.5上使用RDO单机安装icehouse(Ml2+GRE)

    本文主要介绍怎样在CentOS6.5上通过RDO来安装icehouse,因为安装的过程中涉及的软件较多,以及依赖关系比較复杂,建议使用一个全新的操作系统来进行安装. 安装步骤详细例如以下 (1)安装操 ...

  9. 树的直径 poj 2631

    树的直径:从随意一点出发,BFS找到最远的距离,然后在从该点出发BFS找到最远的距离 #include <iostream> #include <algorithm> #inc ...

  10. Unix/Linux环境C编程新手教程(22) C/C++怎样获取程序的执行时间

    1.问:知道程序执行时间我们能够做什么? 在<C++应用程序性能优化>一书中,假设大家读过相信大家一定对性能优化这一块很上心,文中总是对优化前后的时间对照很直观给我们一个感受. 那么我们怎 ...