首页 > 其他分享 >Leetcode1636——按照频率将数组升序排序

Leetcode1636——按照频率将数组升序排序

时间:2023-08-25 14:34:04浏览次数:42  
标签:map nums int Leetcode1636 num 频率 升序 排序

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

相关文章

  • DQL-排序查询
      年龄相同按日期降序排序 ......
  • 拓扑排序学习笔记
    思想拓扑,一看就是从图的开始开始开拓,并按被开拓到的顺序排序拓扑排序的思想如下:将入度为\(0\)的点删除,并记录它被删除的顺序,直到没有点则结束程序图解如本图的拓扑序就为123541.发现1入度为0删除1,2/3的入度减\(1\)2.发现2入度为0删除2,5的入度减\(1\)3.发现3......
  • 执行排序
    排序方式方法排序类排序Suite方法排序的类型类型说明OrderAnnotation(重点)@Order 注解指定排序DisplayName根据显示名称排序Random随机排序MethodName根据方法名称排序importorg.junit.jupiter.api.MethodOrderer.OrderAnnotation;importorg.ju......
  • DAY003_选择排序、冒泡排序、插入排序
    选择排序第一遍遍历:从头开始,找到最小值的坐标,将最小值和数组第一个元素对调第二遍遍历:从第二个元素开始,找到最小值的坐标,将最小值和数组第二个元素对调第三遍遍历:从第三个元素开始,找到最小值的坐标,将最小值和数组第三个元素对调....冒泡排序第一遍遍历:只要前数比后数大就交......
  • C#插入排序算法
    插入排序实现原理插入排序算法是一种简单、直观的排序算法,其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。具体实现步骤如下首先咱们假设数组长度为n,从第二个元素开始,将当前元素存储在临时变量temp中。从当前元素的前一个位置开始向前遍历,比较temp与每个已排......
  • 排序算法总结
    排序算法复杂度比较 快速排序 基准元素的选取会影响复杂度,最坏的情况可能到O(n2)选取区间起始元素选取区间结束元素在区间内随机选取一元素publicclassSort_QuickSort{publicstaticvoidmain(String[]args){int[]nums=newint[]{6,9,1,4,8......
  • 1.Acwing基础课第785题-简单-快速排序
    1.Acwing基础课第785题-简单-快速排序题目描述给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数n。第二行包含n个整数(所有整数均在1~范围内),表示整个数列。输出格式输......
  • 快速排序,冒泡排序与选择排序
    冒泡排序冒泡排序(BubbleSort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成......
  • 【数据结构】排序 外部排序
    外部排序不会考算法设计,考相关的概念和排序方法过程等。1.外部排序的基本概念外部排序是指对于记录很多的大文件进行排序时,无法将其完全复制进内存中进行排序,因此需要将外存中的待排记录一部分一部分地调入内存中进行排序,在排序过程中需要进行多次内存外存之间的交换,这种排序方......
  • Java8实现联合排序
    Comparator<MyObject>combined=Comparator.comparing(MyObject::getField1,Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(MyObject::getField2,Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(MyObject::getF......