【发布时间】:2019-10-18 11:56:38
【问题描述】:
我尝试使用嵌套的 for 循环解决 Codility 示例测试,但它的性能不够好。然后我尝试了以下解决方案,我工作正常。但我不知道第二个 for 循环在第二个解决方案中是如何工作的。
第一个解决方案没有足够的性能。 https://app.codility.com/demo/results/training5Z4ZB8-385/
第二种解决方案是正确的,具有良好的性能。 https://app.codility.com/demo/results/training4E8QZS-MQK/。
public class Solution5 {
public int[] solution(int N, int[] A) {
int[] counter = new int[N];
int maxUpdate = 0, I, B = 0;
for (int i = 0; i < A.length; i++) {
I = A[i] - 1;
if (A[i] >= 1 && A[i] <= N) {
counter[I] = Math.max(B,counter[I]) + 1;
maxUpdate = Math.max(maxUpdate, counter[I]);
} else if (A[i] == (N + 1)) {
B = maxUpdate;
}
}
for (int i = 0; i < counter.length; i++) {
counter[i] = Math.max(B, counter[i]);
}
return counter;
}
}
【问题讨论】: