LeetCode 1207. Unique Number of Occurrences
原题链接在这里:https://leetcode.com/problems/unique-number-of-occurrences/
题目:
Given an array of integers arr
, return true
if the number of occurrences of each value in the array is unique, or false
otherwise.
Example 1:
Input: arr = [1,2,2,1,1,3] Output: true Explanation: The value 1 has 3 occurrences, 2 has 2 and 3 has 1. No two values have the same number of occurrences.
Example 2:
Input: arr = [1,2] Output: false
Example 3:
Input: arr = [-3,0,1,-3,1,1,1,-3,10,0] Output: true
Constraints:
1 <= arr.length <= 1000
-1000 <= arr[i] <= 1000
题解:
Have a map count num to its frequency.
Then go through the map frequency and use a set to record if there is any duplicate.
Time Complexity: O(n). n = arr.length.
Space: O(n).
AC Java:
1 class Solution { 2 public boolean uniqueOccurrences(int[] arr) { 3 if(arr == null || arr.length == 0){ 4 return true; 5 } 6 7 HashMap<Integer, Integer> numToFreq = new HashMap<>(); 8 HashSet<Integer> freqSet = new HashSet<>(); 9 for(int num : arr){ 10 numToFreq.put(num, numToFreq.getOrDefault(num, 0) + 1); 11 } 12 13 for(int n : numToFreq.values()){ 14 if(freqSet.contains(n)){ 15 return false; 16 } 17 18 freqSet.add(n); 19 } 20 21 return true; 22 } 23 }
AC C++:
1 class Solution { 2 public: 3 bool uniqueOccurrences(vector<int>& arr) { 4 unordered_map<int, int> map; 5 unordered_set<int> set; 6 7 for(auto& num : arr){ 8 map[num]++; 9 } 10 11 for(auto& kv : map){ 12 if(!set.insert(kv.second).second){ 13 return false; 14 } 15 } 16 17 return true; 18 } 19 };
AC Python:
1 class Solution: 2 def uniqueOccurrences(self, arr: List[int]) -> bool: 3 visited = set() 4 for freq in collections.Counter(arr).values(): 5 if freq in visited: 6 return False 7 visited.add(freq) 8 return True