LeetCode 1636. Sort Array by Increasing Frequency
原题链接在这里:https://leetcode.com/problems/sort-array-by-increasing-frequency/
题目:
Given an array of integers nums
, sort the array in increasing order based on the frequency of the values. If multiple values have the same frequency, sort them in decreasing order.
Return the sorted array.
Example 1:
Input: nums = [1,1,2,2,2,3] Output: [3,1,1,2,2,2] Explanation: '3' has a frequency of 1, '1' has a frequency of 2, and '2' has a frequency of 3.
Example 2:
Input: nums = [2,3,1,3,2] Output: [1,3,3,2,2] Explanation: '2' and '3' both have a frequency of 2, so they are sorted in decreasing order.
Example 3:
Input: nums = [-1,1,-6,4,5,-6,1,4,1] Output: [5,-1,4,4,-6,-6,1,1,1]
Constraints:
1 <= nums.length <= 100
-100 <= nums[i] <= 100
题解:
HashMap to record num and its frequency.
Use bucket sort to add num into it corresponding frequency bucket.
Go through buckets and add value one by one.
Time Complexity: O(nlogk). n = nums.length. k is average size of bucket list item.
Space: O(n).
AC Java:
class Solution { public int[] frequencySort(int[] nums) { if(nums == null || nums.length == 0){ return nums; } int n = nums.length; int [] res = new int[n]; HashMaphm = new HashMap<>(); for(int num : nums){ hm.put(num, hm.getOrDefault(num, 0) + 1); } ArrayList [] buckets = new ArrayList[n + 1]; for(Map.Entry entry : hm.entrySet()){ int freq = entry.getValue(); if(buckets[freq] == null){ buckets[freq] = new ArrayList (); } for(int i = 0; i < freq; i++){ buckets[freq].add(entry.getKey()); } } int count = 0; for(int i = 0; i <= n; i++){ if(buckets[i] != null){ Collections.sort(buckets[i], (a, b) -> b - a); for(int num : buckets[i]){ res[count++] = num; } } } return res; } }
类似, , .