【发布时间】:2021-02-26 03:05:10
【问题描述】:
我正在尝试解决最大计数器编码问题here。在这个问题中:
给你 N 个计数器,初始设置为 0,你有两种可能的操作:
(i) increase(X) - 计数器 X 加 1; (ii)max counter - 所有计数器都设置为任何计数器的最大值。
给出了一个由 M 个整数组成的非空数组 A。这个数组代表连续的操作:
(i) 如果 A[K] = X,使得 1 ≤ X ≤ N,那么操作 K 是增加(X), (ii) 如果 A[K] = N + 1 那么操作 K 是最大计数器。
目标是计算所有操作后每个计数器的值。
以下是我的解决方案:
// you can also use imports, for example:
import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int[] solution(int N, int[] A) {
// write your code in Java SE 8
int[] counters = new int[N];
int maxVal = 0;
int MAX_COUNTER = N+1;
for(int i=0;i<A.length;i++) {
if(A[i] == MAX_COUNTER) {
Arrays.fill(counters, maxVal);
} else {
counters[A[i]-1]++;
maxVal = counters[A[i]-1];
}
}
return counters;
}
Codility 报告显示该解决方案为 small_random1 和 small_random2 产生了不正确的输出。
【问题讨论】:
-
在这篇文章中解释您的代码,而不是引用外部链接,显示预期返回的内容、当前执行的内容以及到目前为止您尝试过的内容。
-
您应该始终将实际问题陈述或至少提及您在帖子中实际尝试解决的问题。您共享的外部链接在登录该站点之前并未显示实际问题。
-
注意:这个问题的一个好的解决方案需要线性时间。你的需要二次时间。