【发布时间】:2019-10-04 20:50:01
【问题描述】:
能否请您检查代码并让我知道我必须做些什么来提高性能?这个性能问题让我对 Codility 很生气。这是下面的问题和我的代码。
感谢您从现在开始的帮助。
测试:
询问描述 DNA序列可以表示为由字母A、C、G和T组成的字符串,它们对应于序列中连续核苷酸的类型。每个核苷酸都有一个影响因子,它是一个整数。 A、C、G 和 T 型核苷酸的影响因子分别为 1、2、3 和 4。您将回答以下几个问题:给定 DNA 序列的特定部分中包含的核苷酸的最小影响因子是多少?
DNA 序列以非空字符串 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 个查询的答案如下:
DNA 中 2 和 4 位之间的部分含有核苷酸 G 和 C(两次),其影响因子分别为 3 和 2,因此答案为 2。 位置 5 和 5 之间的部分包含一个单核苷酸 T,其影响因子为 4,因此答案为 4。 位置 0 和 6 之间的部分(整个字符串)包含所有核苷酸,特别是影响因子为 1 的核苷酸 A,因此答案为 1。 写一个函数:
类解决方案 { public int[] solution(String S, int[] P, int[] Q); }
给定一个由 N 个字符组成的非空字符串 S 和两个由 M 个整数组成的非空数组 P 和 Q,返回一个由 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] 范围内的整数; M 是 [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;
}
}
返回结果; }
【问题讨论】:
标签: java performance