Giả sử ta có mảng với các phần tử có thể xuất hiện nhiều lần. Sắp xếp mảng sao cho các phần tử được sắp theo tần suất tăng dần. Phần tử xuất hiện ít lần đứng trước.
Ví dụ: nums = [1,5,3,1,3,1,2,5], kết quả [2, 5, 5, 3, 3, 1, 1, 1].
Giải thuật
mp := {}(map tần suất → danh sách phần tử)- Với mỗi
iduy nhất trongnums:x := nums.count(i)- Nếu
xtrongmp: thêmivàomp[x] - Ngược lại:
mp[x] = [i]
ans := []- Với mỗi
itrongsorted(mp)(theo key tăng dần):- Với mỗi
jtrongsorted(mp[i], reverse=True):- Thêm
jlặpilần vàoans
- Thêm
- Với mỗi
- Trả về
ans
Ví dụ (Python)
def solve(nums):
mp = {}
for i in set(nums):
x = nums.count(i)
try:
mp[x].append(i)
except:
mp[x] = [i]
ans = []
for i in sorted(mp):
for j in sorted(mp[i], reverse=True):
ans.extend([j] * i)
return ans
nums = [1, 5, 3, 1, 3, 1, 2, 5]
print(solve(nums))
Input
[1,5,3,1,3,1,2,5]
Output
[2, 5, 5, 3, 3, 1, 1, 1]