In this approach, we will first traverse the array to count the occurrences of each element using a hash map. Then, we will use a set to check if these occurrences are unique. If the size of the set matches the size of the occurrence counts, it implies all occurrences are unique.
Time Complexity: O(n), where n is the length of the array.
Space Complexity: O(1), since we're using fixed-size arrays.
1#include <iostream>
2#include <vector>
3#include <unordered_map>
4#include <unordered_set>
5
6bool uniqueOccurrences(std::vector<int>& arr) {
7 std::unordered_map<int, int> countMap;
8 for (int num : arr) {
9 ++countMap[num];
10 }
11 std::unordered_set<int> occurrences;
12 for (const auto& pair : countMap) {
13 if (!occurrences.insert(pair.second).second) {
14 return false;
15 }
16 }
17 return true;
18}
19
20int main() {
21 std::vector<int> arr = {1, 2, 2, 1, 1, 3};
22 std::cout << (uniqueOccurrences(arr) ? "true" : "false") << std::endl;
23 return 0;
24}
In the C++ version, we use an unordered map to count occurrences of each number, followed by a set to check if any occurrence count is duplicated.
This alternative approach starts by counting occurrences just like the first one. After that, it stores these counts in a list, sorts the list, and then checks for any consecutive equal elements, which would indicate duplicate occurrences.
Time Complexity: O(n log n), due to sorting.
Space Complexity: O(1), since we work within fixed-sized arrays.
1def uniqueOccurrences(arr):
2 from collections import Counter
3 count = Counter(arr)
4 occurrences = sorted(count.values())
5 for i in range(1, len(occurrences)):
6 if occurrences[i] == occurrences[i - 1]:
7 return False
8 return True
9
10arr = [1, 2, 2, 1, 1, 3]
11print(uniqueOccurrences(arr))
The Python approach sorts the occurrence counts and checks for duplicates in a single pass of the sorted list.