【leetcode】1636. 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
解题思路:先统计每个值出现的次数,然后排序即可。
代码如下:
class Solution(object): def frequencySort(self, nums): """ :type nums: List[int] :rtype: List[int] """ dic = {} for i in nums: dic[i] = dic.setdefault(i,0)+1 pair = [] for key,val in dic.iteritems(): pair.append((key,val)) def cmpf(p1,p2): if p1[1] != p2[1]: return p1[1] - p2[1] return p2[0] - p1[0] pair.sort(cmp=cmpf) res = [] for (key,val) in pair: res += [key] * val return res