本文主要是介绍腾讯笔试 求基因碱基的逆序数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
已知碱基序列ACGT为正序。
求任意碱基序列的逆序数。要求算法的时间复杂度为o(n).
如:一序列为 AGTCTCG 则其逆序数为7。
#include<iostream>
using namespace std;int reserveNumber(char *pdna);
int main()
{
char str[]="ACTCTGA";
cout<<reserveNumber(str)<<endl;
return 0;
}
int reserveNumber(char *pdna)
{
int sum=0,i=0;
int c[4]={0};//分别记录ACGT碱基的个数
while(pdna[i]!='\0')
{
switch (pdna[i]){
case 'A':
sum = sum + c[1] + c[2] + c[3];//如果当前元素是A,则将所有在A之前出现的CGT的个数和赋值给A,代表当前A的逆序数。
// c[0]++;//没什么用,A和后面的元素没有逆序数。
break;case 'C':
sum = sum + c[2] + c[3];//如果当前元素是C,则将所有在C之前出现的GT的个数和赋值给C,代表当前C的逆序数。
c[1]++; //统计字符C在出现的次数
break;
case 'G':
sum = sum + c[3];
c[2]++;
break;
case 'T':
c[3]++;
}
i++;
}
return sum;
}
这篇关于腾讯笔试 求基因碱基的逆序数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!