Cho mảng số nguyên. Kiểm tra xem tần suất xuất hiện của mỗi phần tử có độc nhất hay không (không có 2 phần tử nào cùng tần suất). Trả về True nếu tất cả tần suất khác nhau, ngược lại False.
Ví dụ: [1, 1, 2, 2, 2, 3, 4, 4, 4, 4] → True (1:2 lần, 2:3 lần, 3:1 lần, 4:4 lần - tất cả khác nhau).
Thuật toán
- Đếm tần suất mỗi phần tử → dictionary
freq - Duyệt các giá trị tần suất:
- Nếu tần suất đã xuất hiện trong set
seen→ trả vềFalse - Thêm tần suất vào
seen
- Nếu tần suất đã xuất hiện trong set
- Trả về
True
Ví dụ (Python)
class Solution(object):
def uniqueOccurrences(self, arr):
freq = {}
for num in arr:
freq[num] = freq.get(num, 0) + 1
seen = set()
for count in freq.values():
if count in seen:
return False
seen.add(count)
return True
ob1 = Solution()
print(ob1.uniqueOccurrences([1, 1, 2, 2, 2, 3, 4, 4, 4, 4])) # True
print(ob1.uniqueOccurrences([1, 2])) # False (cả 2 đều xuất hiện 1 lần)
Cách ngắn gọn (Pythonic)
from collections import Counter
def uniqueOccurrences(arr):
freq = Counter(arr)
return len(freq.values()) == len(set(freq.values()))
Độ phức tạp
- Thời gian:
O(n) - Không gian:
O(n)
Đầu vào / Đầu ra
Input: [1, 1, 2, 2, 2, 3, 4, 4, 4, 4] Output: True Input: [1, 2] Output: False