加载中...
1636-按照频率将数组升序排序(Sort Array by Increasing Frequency)
发表于:2021-12-03 | 分类: 简单
字数统计: 501 | 阅读时长: 2分钟 | 阅读量:

原文链接: https://leetcode-cn.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

中文题目

给你一个整数数组 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

通过代码

高赞题解

解题思路

频次高位,原值取反(降序),拼接正数。排序后还原原值

代码

class Solution {
    public int[] frequencySort(int[] nums) {
        int[] cnts = new int[201];
        for (int n : nums){
            cnts[n + 100] ++;
        }
        for (int i = 0; i < nums.length; i ++){
            nums[i] = 10000 * cnts[nums[i] + 100] - nums[i] + 100;
        }
        Arrays.sort(nums);

        for (int i = 0; i < nums.length; i ++){
            nums[i] = 100 - nums[i] % 10000 ;
        }

        return nums;
    }
}

统计信息

通过次数 提交次数 AC比率
9643 13661 70.6%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
1617-统计子树中城市之间最大距离(Count Subtrees With Max Distance Between Cities)
下一篇:
1638-统计只差一个字符的子串数目(Count Substrings That Differ by One Character)
本文目录
本文目录