Unique Number of Occurrences — Frequency Map Validation
Advertisement
Problem 181 · Unique Number of Occurrences
Difficulty: Easy · Pattern: Frequency Map
Given an array, return true if no two distinct values share the same frequency.
Intuition
Build a frequency map, then check that all frequency values are distinct (use a set).
Solutions
// C
#include <stdbool.h>
#include <string.h>
bool uniqueOccurrences(int* arr, int n) {
int freq[2001] = {0}; // values in [-1000,1000]
for (int i = 0; i < n; i++) freq[arr[i]+1000]++;
bool seen[n+1]; memset(seen, 0, sizeof(seen));
for (int i = 0; i < 2001; i++) {
if (freq[i] == 0) continue;
if (seen[freq[i]]) return false;
seen[freq[i]] = true;
}
return true;
}
// C++
bool uniqueOccurrences(vector<int>& arr) {
unordered_map<int,int> freq;
for (int x : arr) freq[x]++;
unordered_set<int> seen;
for (auto& [k,v] : freq) {
if (!seen.insert(v).second) return false;
}
return true;
}
// Java
public boolean uniqueOccurrences(int[] arr) {
Map<Integer,Integer> freq = new HashMap<>();
for (int x : arr) freq.merge(x, 1, Integer::sum);
Set<Integer> seen = new HashSet<>(freq.values());
return seen.size() == freq.size();
}
// JavaScript
var uniqueOccurrences = function(arr) {
const freq = new Map();
for (const x of arr) freq.set(x, (freq.get(x) || 0) + 1);
return new Set(freq.values()).size === freq.size;
};
# Python
from collections import Counter
def uniqueOccurrences(arr):
c = Counter(arr)
return len(set(c.values())) == len(c)
Complexity
- Time: O(n)
- Space: O(n)
Key Insight
Convert values to set — if size shrinks, a duplicate frequency exists.
Advertisement