题目描述:已知碱基序列ACGT为正序。求任意碱基序列的逆序数。要求算法的时间复杂度为O(n)。
举例:一序列为AGTCTCG,则其逆序数为7。
- #include <iostream>
-
- using namespace std;
-
- int reverse_order_number(char *pdna);
-
- int main() {
- char str[] = "ACTCTGA";
- cout << reverse_order_number(str) << endl;
- return 0;
- }
-
- int reverse_order_number(char *pdna) {
- int sum = 0, i = 0;
- int c[4] = {0};
- while(pdna[i] != '\0') {
- switch(pdna[i]) {
- case 'A':
-
- sum = sum + c[1] + c[2] + c[3];
-
- break;
- case 'C':
-
- sum = sum + c[2] + c[3];
- c[1]++;
- break;
- case 'G':
-
- sum = sum + c[3];
- c[2]++;
- break;
- case 'T':
-
- c[3]++;
- break;
- }
- i++;
- }
- return sum;
- }