给你一个整数数组 nums
,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。
请你返回排序后的数组。
示例 1:
输入:nums = [1,1,2,2,2,3] 输出:[3,1,1,2,2,2] 解释:'3' 频率为 1,'1' 频率为 2,'2' 频率为 3 。
示例 2:
输入:nums = [2,3,1,3,2] 输出:[1,3,3,2,2] 解释:'2' 和 '3' 频率都为 2 ,所以它们之间按照数值本身降序排序。
示例 3:
输入:nums = [-1,1,-6,4,5,-6,1,4,1] 输出:[5,-1,4,4,-6,-6,1,1,1]
提示:
1 <= nums.length <= 100
-100 <= nums[i] <= 100
思路不难想,主要使用了Java数据结构的基础知识,了解HashMap的频率统计方法以及集合的自定义排序规则
class Solution { public int[] frequencySort(int[] nums) { Map<Integer,Integer> map = new HashMap<>(); List<Integer> list = new ArrayList<>(); //统计次数 for(int num : nums) { list.add(num); map.put(num, map.getOrDefault(num,0) + 1); } //按规则排序 list.sort( (a,b) -> { int num1 = map.get(a); int num2 = map.get(b); if(num1 == num2) { return b - a; } return num1 - num2; } ); int[] res = new int[list.size()]; for(int i=0;i<list.size();i++) { res[i] = list.get(i); } return res; } }
虽然是简单题,但是也会提醒你,不要忘记基础的方法使用哦 (≧∇≦)ノ
标签:map,nums,int,Leetcode1636,num,频率,升序,排序 From: https://www.cnblogs.com/Yuansj0206/p/17656839.html