*[codility]GenomicRangeQuery
http://codility.com/demo/take-sample-test/genomicrangequery
这题有点意思。
一开始以为是RMQ或者线段树,但这样要O(n*logn)。考虑到只有四种字符,可以用数组记录每个字符i之前出现过几次。
二,查询区间是闭区间,所以要处理off by one的问题。
// you can also use includes, for example:
// #include <algorithm>
vector<int> solution(string &S, vector<int> &P, vector<int> &Q) {
// write your code in C++98
int len = S.length();
vector<int> A(len+1);
vector<int> C(len+1);
vector<int> G(len+1);
vector<int> T(len+1);
A[0] = 0;
C[0] = 0;
G[0] = 0;
T[0] = 0;
for (int i = 1; i <= len; i++) {
A[i] = A[i-1];
C[i] = C[i-1];
G[i] = G[i-1];
T[i] = T[i-1];
if (S[i-1] == 'A') {
A[i]++;
}
else if (S[i-1] == 'C') {
C[i]++;
}
else if (S[i-1] == 'G') {
G[i]++;
}
else if (S[i-1] == 'T') {
T[i]++;
}
}
vector<int> ans;
for (int i = 0; i < P.size(); i++) {
int p = P[i];
int q = Q[i] + 1;
if (A[q] - A[p] > 0) ans.push_back(1);
else if (C[q] - C[p] > 0) ans.push_back(2);
else if (G[q] - G[p] > 0) ans.push_back(3);
else if (T[q] - T[p] > 0) ans.push_back(4);
}
return ans;
}
*[codility]GenomicRangeQuery的更多相关文章
- GenomicRangeQuery /codility/ preFix sums
首先上题目: A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which ...
- Codility NumberSolitaire Solution
1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...
- codility flags solution
How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...
- *[codility]Peaks
https://codility.com/demo/take-sample-test/peaks http://blog.csdn.net/caopengcs/article/details/1749 ...
- *[codility]Country network
https://codility.com/programmers/challenges/fluorum2014 http://www.51nod.com/onlineJudge/questionCod ...
- *[codility]AscendingPaths
https://codility.com/programmers/challenges/magnesium2014 图形上的DP,先按照路径长度排序,然后依次遍历,状态是使用到当前路径为止的情况:每个 ...
- *[codility]MaxDoubleSliceSum
https://codility.com/demo/take-sample-test/max_double_slice_sum 两个最大子段和相拼接,从前和从后都扫一遍.注意其中一段可以为0.还有最后 ...
- *[codility]Fish
https://codility.com/demo/take-sample-test/fish 一开始习惯性使用单调栈,后来发现一个普通栈就可以了. #include <stack> us ...
- *[codility]CartesianSequence
https://codility.com/programmers/challenges/upsilon2012 求笛卡尔树的高度,可以用单调栈来做. 维持一个单调递减的栈,每次进栈的时候记录下它之后有 ...
随机推荐
- Android屏幕保持唤醒状态
我们程序偶尔会有需要屏幕一直或较长时间的保持唤醒状态,而用户的睡眠时间又设置的比较短.这时可能会对程序以及用户的使用造成一定的影响.在Android中有两种方法,可以让我们在我们需要保持唤醒的页面长时 ...
- PL/SQL Developer 使用中文条件查询时无数据的解决方法
PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:select userenv('language') from dual; 显示:SIM ...
- ios专题 - objc runtime 动态增加属性
objective-c中,有类别可以在不修改源码的基础上增加方法:近排在看别人的开源代码时,发现还可以动态增加属性.而且是在运行时,太牛B了. 使用运行时库,必须要先引入 objc/runtime.h ...
- CSS高度塌陷
问题描述:当父元素只包含浮动的元素的时候,且父元素没有设置高度,如果父元素设置了边框border,那么看起来子元素不在父元素之内. 比如这样: html: <div id="paren ...
- Windows下查询进程、端口
PID --> 端口号netstat -ano | findstr 8244 端口号 --> PIDnetstat -aon|findstr "11211" PID - ...
- 工厂方法(Factory Pattern)
工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.(注:“决定”不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际 ...
- MySQL5.7 linux二进制安装
200 ? "200px" : this.width)!important;} --> 介绍 MySQL5.7出来也有大半年了,业内也一直在宣传5.7有多么的N,官网的也是宣 ...
- IE专用CSS,最全的CSS hack方式一览
http://blog.csdn.net/freshlover/article/details/12132801
- 紧跟时代步伐,让我们拥抱MVC 3
作为一个开发者,我们不希望技术很快的更新,这是因为我们还没有完全掌握原来技术的基础上,又要掌握新的技术,作为天天忙忙碌碌的程序员,我们不希望还要额外的时间来学习,尤其是当我们的年龄,逐渐的变大的时候, ...
- 青瓷qici - H5小游戏 抽奖机 “one-arm bandit”
写在前面 本文实现一个简单的抽奖效果,使用青瓷qici引擎,其中应用了Tween动画,粒子系统,遮罩,UI界面布局,项目设置,发布等功能呢. 目前开发采用1.0.7版本,后续如果界面有所变化请参考这个 ...