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

 

posted @ 2022-06-24 14:46  Dylan_Java_NYC  阅读(30)  评论(0编辑  收藏  举报