返回
力扣之按照频率将数组升序排序
前端
2023-10-18 19:11:42
1. 问题
给你一个整数数组 nums,请你将数组按照每个值的频率升序排序。如果有多个值的频率相同,请你按照数值本身将它们降序排序。
2. 示例:
示例 1:
输入:nums = [1,1,2,2,2,3]
输出:[3,1,1,2,2,2]
解释:
- 3 在数组中出现 1 次。
- 1 在数组中出现 2 次。
- 2 在数组中出现 3 次。
因此,返回按频率升序排序后的数组 [3,1,1,2,2,2]。
示例 2:
输入:nums = [2,3,1,3,2]
输出:[1,3,3,2,2]
解释:
- 2 在数组中出现 2 次。
- 3 在数组中出现 2 次。
- 1 在数组中出现 1 次。
因此,返回按频率升序排序后的数组 [1,3,3,2,2]。
示例 3:
输入:nums = [-1,1,-6,4,5,-6,1,4,1]
输出:[5,-1,-1,1,1,1,4,4,-6,-6]
解释:
- 5 在数组中出现 1 次。
- -1 在数组中出现 2 次。
- 1 在数组中出现 3 次。
- 4 在数组中出现 2 次。
- -6 在数组中出现 2 次。
因此,返回按频率升序排序后的数组 [5,-1,-1,1,1,1,4,4,-6,-6]。
3. 算法:
我们可以使用以下算法来解决这个问题:
- 首先,我们使用一个哈希表来记录每个值的频率。
- 然后,我们对哈希表中的元素进行排序,以升序排列频率,降序排列数值。
- 最后,我们将排序后的元素重新排列成一个数组,并返回。
4. 实现:
def frequency_sort(nums):
# 使用哈希表记录每个值的频率
freq = {}
for num in nums:
if num not in freq:
freq[num] = 0
freq[num] += 1
# 将哈希表中的元素排序
sorted_freq = sorted(freq.items(), key=lambda x: (x[1], -x[0]), reverse=True)
# 将排序后的元素重新排列成一个数组
result = []
for num, freq in sorted_freq:
for _ in range(freq):
result.append(num)
return result
# 测试用例
nums1 = [1,1,2,2,2,3]
nums2 = [2,3,1,3,2]
nums3 = [-1,1,-6,4,5,-6,1,4,1]
print(frequency_sort(nums1)) # [3, 1, 1, 2, 2, 2]
print(frequency_sort(nums2)) # [1, 3, 3, 2, 2]
print(frequency_sort(nums3)) # [5, -1, -1, 1, 1, 1, 4, 4, -6, -6]
5. 结论:
通过这篇文章,您已经学会了如何使用LeetCode平台提供的代码模板,快速生成按照频率对数组进行升序排序的代码。我们还提供了示例代码和测试用例,帮助您更好地理解和掌握算法的实现。希望这篇文章对您有所帮助,如果您有任何问题,欢迎随时留言。