java codility training Genomic-range-query

后端 未结 30 2650
悲哀的现实
悲哀的现实 2021-02-01 12:47

The task is:

A non-empty zero-indexed string S is given. String S consists of N characters from the set of upper-case English letters A, C, G, T.

<
30条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-01 13:26

    My C++ solution

    vector solution(string &S, vector &P, vector &Q) {
    
        vector impactCount_A(S.size()+1, 0);
        vector impactCount_C(S.size()+1, 0);
        vector impactCount_G(S.size()+1, 0);
    
        int lastTotal_A = 0;
        int lastTotal_C = 0;
        int lastTotal_G = 0;
        for (int i = (signed)S.size()-1; i >= 0; --i) {
            switch(S[i]) {
                case 'A':
                    ++lastTotal_A;
                    break;
                case 'C':
                    ++lastTotal_C;
                    break;
                case 'G':
                    ++lastTotal_G;
                    break;
            };
    
            impactCount_A[i] = lastTotal_A;
            impactCount_C[i] = lastTotal_C;
            impactCount_G[i] = lastTotal_G;
        }
    
        vector results(P.size(), 0);
    
        for (int i = 0; i < P.size(); ++i) {
            int pIndex = P[i];
            int qIndex = Q[i];
    
            int numA = impactCount_A[pIndex]-impactCount_A[qIndex+1];
            int numC = impactCount_C[pIndex]-impactCount_C[qIndex+1];
            int numG = impactCount_G[pIndex]-impactCount_G[qIndex+1];
    
            if (numA > 0) {
                results[i] = 1;
            }
            else if (numC > 0) {
                results[i] = 2;
            }
            else if (numG > 0) {
                results[i] = 3;
            }
            else {
                results[i] = 4;
            }
        }
    
        return results;
    }
    

提交回复
热议问题