Ich habe versucht, die folgenden Aufgaben zu lösen:java codility Max-Zähler
Sie sind N-Zähler gegeben, zunächst auf 0 gesetzt, und Sie haben zwei mögliche Operationen auf ihnen:
increase(X) − counter X is increased by 1,
max_counter − all counters are set to the maximum value of any counter.
A Nicht leeres nullindiziertes Array A von M ganzen Zahlen ist gegeben. Diese Anordnung stellt aufeinander folgende Operationen:
if A[K] = X, such that 1 ≤ X ≤ N, then operation K is increase(X),
if A[K] = N + 1 then operation K is max_counter.
Zum Beispiel gegebene ganze Zahl N = 5 und Array-A, so dass:
A[0] = 3
A[1] = 4
A[2] = 4
A[3] = 6
A[4] = 1
A[5] = 4
A[6] = 4
die Werte des Zählers nach jedem aufeinanderfolgenden Vorgang werden:
(0, 0, 1, 0, 0)
(0, 0, 1, 1, 0)
(0, 0, 1, 2, 0)
(2, 2, 2, 2, 2)
(3, 2, 2, 2, 2)
(3, 2, 2, 3, 2)
(3, 2, 2, 4, 2)
Ziel ist es, den Wert jedes Zählers nach allen Operationen zu berechnen.
struct Results {
int * C;
int L;
};
Schreiben eine Funktion:
struct Results solution(int N, int A[], int M);
, die, da eine ganze Zahl N und ein nicht-leere Null indiziertes Array A, bestehend aus M ganzen Zahlen sind, eine Folge von ganzen Zahlen gibt die Werte des Zählers repräsentierten .
a structure Results (in C), or
a vector of integers (in C++), or
a record Results (in Pascal), or
an array of integers (in any other programming language).
Zum Beispiel gegeben:
A[0] = 3
A[1] = 4
A[2] = 4
A[3] = 6
A[4] = 1
A[5] = 4
A[6] = 4
die Funktion zurückgeben sollte [3, 2, 2, 4, 2], wie oben erklärt
die Sequenz als zurückgegeben werden sollte.
davon ausgehen, dass:
N and M are integers within the range [1..100,000];
each element of array A is an integer within the range [1..N + 1].
Komplexität:
expected worst-case time complexity is O(N+M);
expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).
Elemente des Eingabe-Arrays geändert werden kann.
Hier ist meine Lösung:
import java.util.Arrays;
class Solution {
public int[] solution(int N, int[] A) {
final int condition = N + 1;
int currentMax = 0;
int countersArray[] = new int[N];
for (int iii = 0; iii < A.length; iii++) {
int currentValue = A[iii];
if (currentValue == condition) {
Arrays.fill(countersArray, currentMax);
} else {
int position = currentValue - 1;
int localValue = countersArray[position] + 1;
countersArray[position] = localValue;
if (localValue > currentMax) {
currentMax = localValue;
}
}
}
return countersArray;
}
}
Hier ist der Code Bewertung: https://codility.com/demo/results/demo6AKE5C-EJQ/
Können Sie mir einen Tipp geben, was mit dieser Lösung ist falsch?
In der Theorie klingt die recht, aber ich habe versucht, es nicht zu sehen, ob die 100 Punkte gibt – Relequestual
Dies wird jedes Array unter der Annahme, eingegeben wird, 1 kleiner als N ist, was nicht der Fall sein kann? –