腾讯笔试 求基因碱基的逆序数

来源:互联网 发布:Java仿hashmap实现 编辑:程序博客网 时间:2024/05/16 04:56

已知碱基序列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;
}
0 0
原创粉丝点击