1207. Eindeutige Anzahl von Vorkommen
Geben Sie bei einem gegebenen Array von ganzen Zahlen arr „true“ zurück, wenn die Anzahl der Vorkommen jedes Werts im Array eindeutig ist, andernfalls „false“.
Beispiel 1:
Eingabe: arr = [1,2,2,1,1,3]
Ausgabe: true
Erläuterung: Der Wert 1 kommt dreimal vor, 2 hat 2 und 3 hat 1. Keine zwei Werte kommen gleich oft vor.
Beispiel 2:
Eingabe: arr = [1,2]
Ausgabe: falsch
Beispiel 3:
Eingabe: arr = [-3,0,1,-3,1,1,1,-3,10,0]
Ausgabe: wahr
Einschränkungen:
- 1 <= arr.length <= 1000
- -1000 <= arr[i] <= 1000
Von: LeetCode
Link: 1207. Eindeutige Anzahl von Vorkommen
Lösung:
Ideen:
Wir können eine Hash-Tabelle (oder ein Array unter Berücksichtigung der Einschränkungen) verwenden, um Vorkommen zu zählen. Anschließend verwenden wir eine weitere Hash-Tabelle, um die Eindeutigkeit dieser Zählungen zu überprüfen.
- Vorkommen ist ein von -1000 bis 1000 indiziertes Array (um 1000 verschoben, um negative Zahlen aufzunehmen), das zum Zählen der Vorkommen jeder Ganzzahl in arr verwendet wird.
- seen ist ein boolesches Array, das verwendet wird, um zu verfolgen, ob eine bestimmte Vorkommensanzahl bereits zuvor gesehen wurde.
- Wir durchlaufen zunächst den arr, um das Vorkommen jeder Zahl zu zählen.
- Anschließend durchlaufen wir das Vorkommnis-Array, um zu überprüfen, ob bereits eine Zählung festgestellt wurde. Wenn eine Zählung wiederholt wird, geben wir false zurück. Wenn wir die Schleife beenden, ohne doppelte Zählungen zu finden, geben wir „true“ zurück.
Code:
bool uniqueOccurrences(int* arr, int arrSize) {
int occurrences[2001] = {
0}; // Array to count occurrences, offset by 1000 for negative numbers
bool seen[1001] = {
false}; // Array to track if an occurrence count has been seen
// Count occurrences of each number
for (int i = 0; i < arrSize; i++) {
occurrences[arr[i] + 1000]++;
}
// Check for unique occurrences
for (int i = 0; i < 2001; i++) {
if (occurrences[i] > 0) {
if (seen[occurrences[i]]) {
// If we have already seen this count, it's not unique
return false;
}
seen[occurrences[i]] = true;
}
}
return true;
}