Не могли бы вы проверить код и сообщить, что мне нужно сделать, чтобы повысить производительность? Эта проблема производительности заставляет меня злиться на Codility. Вот вопрос и мой код ниже.
Спасибо за вашу помощь отныне.
Тест:
спросите описание Последовательность ДНК может быть представлена в виде строки, состоящей избукв A, C, G и T, которые соответствуют типам последовательных нуклеотидов в последовательности. Каждый нуклеотид имеет ударный фактор, который является целым числом. Нуклеотиды типов A, C, G и T имеют импакт-факторы 1, 2, 3 и 4 соответственно. Вы собираетесь ответить на несколько запросов в форме: Каков минимальный импакт-фактор нуклеотидов, содержащихся в определенной части данной последовательности ДНК?
Последовательность ДНК дана в виде непустой строки S = S[0] S [1] ... S [N-1], состоящий из N символов. Есть M запросов, которые даны в непустых массивах P и Q, каждый из которых состоит из M целых чисел. K-й запрос (0 ≤ K
Например,рассмотрим строку S = CAGCCTA и массивы P, Q такие, что:
P[0] = 2 Q[0] = 4
P[1] = 5 Q[1] = 5
P[2] = 0 Q[2] = 6
Ответы на эти запросы M = 3 следующие:
Часть ДНК между позициями 2 и4 содержит нуклеотиды G и C (дважды), факторы воздействия которых равны 3 и 2 соответственно, поэтому ответ равен 2. Часть между позициями 5 и 5 содержит один нуклеотид T, фактор воздействия которого равен 4, поэтому ответ равен 4. Часть между позициями 0 и 6 (вся строка) содержит все нуклеотиды, в частности нуклеотид A, коэффициент воздействия которого равен 1, поэтому ответ равен 1. Напишите функцию:
class Solution {public int [] solution(Строка S, int [] P, int [] Q);}
что, учитывая непустую строку S, состоящую из N символов и два непустых массива P и Q, состоящие из M целых чисел, возвращает массив, состоящий из M целых чисел, задающих последовательные ответы на все запросы.
Массив результатов должен быть возвращен в виде массива целых чисел.
Например, если задана строка S = CAGCCTA и массивы P, Q такие, что:
P[0] = 2 Q[0] = 4
P[1] = 5 Q[1] = 5
P[2] = 0 Q[2] = 6
функциядолжен вернуть значения [2, 4, 1], как описано выше.
Напишите эффективный алгоритм для следующих предположений:
N - целое число в диапазоне [1..100,000];М представляет собой целое число в диапазоне [1,50 000];каждый элемент массивов P, Q представляет собой целое число в диапазоне [0..N - 1];P [K] ≤ Q [K], где 0 ≤ K
Мое решение:
public static int[] solution(String S, int[] firstArray, int[] secondArray) {
String subStr="";
int[] result = new int[firstArray.length];
for(int i=0; i < firstArray.length; i++) {
subStr = S.substring(firstArray[i], secondArray[i] + 1);
if(subStr.contains("A")) { result[i] = 1; }
else if(subStr.contains("C")){ result[i] = 2; }
else if(subStr.contains("G")){ result[i] = 3;
} else if(subStr.contains("T")){ result[i] = 4;
}
}
return result;}