Find the minimal nucleotide from a range of sequence DNA.
Solution
#include <unordered_map>vector<int> solution(string &S, vector<int> &P, vector<int> &Q) { // write your code in C++11 (g++ 4.8.2) vector<int> pre_sum_A; vector<int> pre_sum_C; vector<int> pre_sum_G; int cnt_A = 0; int cnt_C = 0; int cnt_G = 0; for (size_t i = 0; i < S.size(); i++) { if (S[i] == 'A') cnt_A++; else if (S[i] == 'C') cnt_C++; else if (S[i] == 'G') cnt_G++; pre_sum_A.push_back(cnt_A); pre_sum_C.push_back(cnt_C); pre_sum_G.push_back(cnt_G); } vector<int> result(P.size()); for (int i = 0; i < int(P.size()); i++) { int A = (S[P[i]] == 'A') ? 1 : 0; int C = (S[P[i]] == 'C') ? 1 : 0; int G = (S[P[i]] == 'G') ? 1 : 0; if (pre_sum_A[Q[i]] - pre_sum_A[P[i]] + A > 0) result[i] = 1; else if (pre_sum_C[Q[i]] - pre_sum_C[P[i]] + C > 0) result[i] = 2; else if (pre_sum_G[Q[i]] - pre_sum_G[P[i]] + G > 0) result[i] = 3; else result[i] = 4; } return result;}