当前位置: 首页 > news >正文

排序题目:按照频率将数组升序排序

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:按照频率将数组升序排序

出处:1636. 按照频率将数组升序排序

难度

3 级

题目描述

要求

给定一个整数数组 nums \texttt{nums} nums,将数组按照每个值的频率升序排序。如果有多个值的频率相同,按照数值本身将它们降序排序。

返回排序后的数组。

示例

示例 1:

输入: nums = [1,1,2,2,2,3] \texttt{nums = [1,1,2,2,2,3]} nums = [1,1,2,2,2,3]
输出: [3,1,1,2,2,2] \texttt{[3,1,1,2,2,2]} [3,1,1,2,2,2]
解释: 3 \texttt{3} 3 的频率为 1 \texttt{1} 1 1 \texttt{1} 1 的频率为 2 \texttt{2} 2 2 \texttt{2} 2 的频率为 3 \texttt{3} 3

示例 2:

输入: nums = [2,3,1,3,2] \texttt{nums = [2,3,1,3,2]} nums = [2,3,1,3,2]
输出: [1,3,3,2,2] \texttt{[1,3,3,2,2]} [1,3,3,2,2]
解释: 2 \texttt{2} 2 3 \texttt{3} 3 的频率都为 2 \texttt{2} 2,所以它们之间按照数值本身降序排序。

示例 3:

输入: nums = [-1,1,-6,4,5,-6,1,4,1] \texttt{nums = [-1,1,-6,4,5,-6,1,4,1]} nums = [-1,1,-6,4,5,-6,1,4,1]
输出: [5,-1,4,4,-6,-6,1,1,1] \texttt{[5,-1,4,4,-6,-6,1,1,1]} [5,-1,4,4,-6,-6,1,1,1]

数据范围

  • 1 ≤ nums.length ≤ 100 \texttt{1} \le \texttt{nums.length} \le \texttt{100} 1nums.length100
  • -100 ≤ nums[i] ≤ 100 \texttt{-100} \le \texttt{nums[i]} \le \texttt{100} -100nums[i]100

解法

思路和算法

这道题要求将给定的数组按照元素频率排序,因此需要获得每个元素的频率,然后排序。

首先遍历数组获得每个元素的频率,然后定义二元组类型存储每个元素的元素值和频率,使用列表存储全部二元组,并对列表排序。列表排序的依据如下:

  1. 如果两个二元组的频率不同,则根据频率升序排序;

  2. 如果两个二元组的频率相同,则根据元素值降序排序。

遍历排序后的列表,对于列表中的每个二元组,将元素值根据频率填入排序后的数组中。遍历结束之后即可得到完整的排序后的数组。

代码

class Solution {class Pair {int num;int freq;public Pair(int num, int freq) {this.num = num;this.freq = freq;}}public int[] frequencySort(int[] nums) {Map<Integer, Integer> counts = new HashMap<Integer, Integer>();for (int num : nums) {counts.put(num, counts.getOrDefault(num, 0) + 1);}List<Pair> pairs = new ArrayList<Pair>();Set<Map.Entry<Integer, Integer>> entries = counts.entrySet();for (Map.Entry<Integer, Integer> entry : entries) {int num = entry.getKey();int freq = entry.getValue();pairs.add(new Pair(num, freq));}Collections.sort(pairs, (a, b) -> {if (a.freq != b.freq) {return a.freq - b.freq;} else {return b.num - a.num;}});int length = nums.length;int[] sorted = new int[length];int index = 0;for (Pair pair : pairs) {int num = pair.num;int freq = pair.freq;for (int i = 0; i < freq; i++) {sorted[index++] = num;}}return sorted;}
}

复杂度分析

  • 时间复杂度: O ( n log ⁡ n ) O(n \log n) O(nlogn),其中 n n n 是数组 nums \textit{nums} nums 的长度。排序需要 O ( n log ⁡ n ) O(n \log n) O(nlogn) 的时间,每次遍历都需要 O ( n ) O(n) O(n) 的时间,因此时间复杂度是 O ( n log ⁡ n ) O(n \log n) O(nlogn)

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组 nums \textit{nums} nums 的长度。哈希表和列表都需要 O ( n ) O(n) O(n) 的空间。

相关文章:

排序题目:按照频率将数组升序排序

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;按照频率将数组升序排序 出处&#xff1a;1636. 按照频率将数组升序排序 难度 3 级 题目描述 要求 给定一个整数数组 nums \texttt{nums} nums&a…...

实分析与测度论问题的分类

实分析主要研究实数、实数序列、实数极限以及实值函数的分析&#xff0c;而度量空间则是一个具有距离函数的集合&#xff0c;其分类可以从多个角度进行。 实分析 实分析主要关注实数、实数序列、实数极限以及实值函数的分析。它涉及到多个重要的概念和理论&#xff0c;包括但…...

动态代理更改Java方法的返回参数(可用于优化feign调用后R对象的统一处理)

动态代理更改Java方法的返回参数&#xff08;可用于优化feign调用后R对象的统一处理&#xff09; 需求原始解决方案优化后方案1.首先创建AfterInterface.java2.创建InvocationHandler处理代理方法3. 调用 实际运行场景拓展 需求 某些场景&#xff0c;调用别人的方法&#xff0…...

Redis缓存数据库进阶——Redis与分布式锁(6)

分布式锁简介 1. 什么是分布式锁 分布式锁是一种在分布式系统环境下&#xff0c;通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据&#xff0c;从而避免数据的不一致性。 线程锁&#xff1a; 也被称为互斥锁&#xff08;Mu…...

网络芯片(又称为PHY网络芯片)

Realtek RTL8152B是一种常见的主板集成网络芯片&#xff08;又称为PHY网络芯片&#xff09;。PHY芯片是指将网络控制芯片的运算部分交由处理器或南桥芯片处理&#xff0c;以简化线路设计&#xff0c;从而降低成本。 https://www.realtek.com/Download/List?cate_id585 Realt…...

01 Go Web基础_20240728 课程笔记

概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 基础不好的同学每节课的代码最好配合视频进行阅读和学习&#xff0c;如果基础比较扎实&#xff0c;则阅读本教程巩固一下相关知识点即可&#xff0c;遇到不会的知识点再看视频。 视频课程 最近发现越来越多…...

嵌入式学习Day12---C语言提升

目录 一、指针数组 1.1.什么是指针数组 2.2. 格式 2.3.存储 2.4.与字符型二维数组相比 2.5.什么时候使用指针数组 2.6.练习 二、数组指针 2.1.什么是数组指针 2.2.格式 2.3.一维数组 2.3.特点 2.4.什么时候使用 三、指针和数组的关系 3.1.一维数组和指针 …...

6.6 使用dashboard商城搜索导入模板

本节重点介绍 : 模板商城中搜索模板导入模板修改模板 大盘模板商城地址 免费的 地址 https://grafana.com/grafana/dashboards 搜索模板技巧 详情 导入dashboard 两种导入模式 url导入id导入json文件导入 导入 node_exporter模板 https://grafana.com/grafana/dashboa…...

一文讲透useMemo和useCallback

在React项目中是经常会使用到useMemo&#xff0c;useCallBack的&#xff0c;这是两个优化性能的方法&#xff0c;那么useMemo&#xff0c;useCallBack到底是什么呢&#xff1f;什么时候用呢&#xff1f; 下面将给打击分享相关知识&#xff0c;希望对大家有所帮助同时欢迎讨论指…...

【环境变量】安装了一个软件,如何配置环境变量?

配置环境变量为啥&#xff1f; 方便地在任何文件夹下调用某一指定目录下的文件。 配置步骤 以jdk17为例。 1.打开环境变量配置页面 2.新建一个变量&#xff0c;变量名为JAVA_HOME&#xff0c;内容为jdk的path路径 3.打开path变量&#xff0c;新建一个%JAVA_HOME%\bin&#x…...

重生之我当程序猿外包

第一章 个人介绍与收入历程 我出生于1999年&#xff0c;在大四下学期进入了一家互联网公司实习。当时的实习工资是3500元&#xff0c;公司还提供住宿。作为一名实习生&#xff0c;这个工资足够支付生活开销&#xff0c;每个月还能给父母转1000元&#xff0c;自己留2500元用来吃…...

我想给 git 分支换一个名字,应该怎么做?

Git中重命名分支的操作步骤如下: 确保你在要重命名的分支上。可以使用git branch或git status命令查看当前所在分支[1][2]. 使用以下命令重命名当前分支: git branch -m new-branch-name例如,将当前分支重命名为"feature-xyz": git branch -m feature-xyz-m参数是&q…...

echarts多stack的legend点选

echarts支持点击legend&#xff0c;实现显示和隐藏legend对应的数据&#xff0c;具体就是option里series里,name为legend值的数据。 如果配置了多个stack&#xff0c;那么可能你可能设置了多组legend&#xff0c;你点选的是多个legend组中的某组中的一个&#xff0c;那么如果不…...

搭建自己的金融数据源和量化分析平台(四):自动化更新上市公司所属一级、二级行业以及股票上市状态

前面做了更新沪深交易所的上市股票列表的读取和更新&#xff0c;但一旦股票退市则需要在数据库里将该股票状态更新为退市&#xff0c;同时附上退市日期&#xff0c;将股票名更改为XX退。 此外深交所下载的xls解析出来是没有上市公司所属的二级行业的&#xff0c;因此还需要建立…...

科创板重启IPO上会!募投审核新方向?思看科技等优化募投项目

撰稿 | 多客 来源 | 贝多财经 根据上交所项目审核动态最新公告&#xff0c;思看科技&#xff08;杭州&#xff09;股份有限公司&#xff08;简称“思看科技”&#xff09;将于8月2日上会&#xff0c;标志着时隔50天后科创板重新迎来首家上会企业&#xff0c;也标志着思看科技…...

深入解析损失函数:从基础概念到YOLOv8的应用

深入解析损失函数&#xff1a;从基础概念到YOLOv8的应用 在机器学习和深度学习中&#xff0c;损失函数是至关重要的组件&#xff0c;它们衡量模型的预测值与真实值之间的差距&#xff0c;从而指导模型的优化过程。本文将详细探讨损失函数的基本概念&#xff0c;及其在YOLOv8中…...

2.11.ResNet

ResNet 动机&#xff1a;我们总是想加更多层&#xff0c;但加更多层并不总是能改进精度 可以看出F1到F6模型越来越大&#xff0c;但F6距离最优解却总变远了&#xff0c;反而效果不好&#xff0c;通俗的来说就是学偏了&#xff0c;实际上我们希望是这样的&#xff1a; ​ 更大…...

GitLab添加TortoiseGIT生成SSH Key

文章目录 前言一、PuTTYgen二、GitLab 前言 GitLab是一个用于托管代码仓库和项目管理的Web平台&#xff0c;公司搭建自己的gitlab来管理代码&#xff0c;我们在clone代码的时候可以选择http协议&#xff0c;也可以选择ssh协议来拉取代码。 SSH (Secure Shell)是一种通过网络进…...

20240729 大模型评测

参考&#xff1a; MMBench&#xff1a;基于ChatGPT的全方位多模能力评测体系_哔哩哔哩_bilibili https://en.wikipedia.org/wiki/Levenshtein_distance cider: https://zhuanlan.zhihu.com/p/698643372 GitHub - open-compass/opencompass: OpenCompass is an LLM evalua…...

基于微信小程序的校园警务系统/校园安全管理系统/校园出入管理系统

摘要 伴随着社会以及科学技术的发展&#xff0c;小程序已经渗透在人们的身边&#xff0c;小程序慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;小程序这一名词已不陌生&#xff0c;越来越多的学校机构等都会定制一款属于自己个性化的小程…...

英飞凌AURIX TC3XX GPIO驱动配置与LED呼吸灯实现

1. 认识AURIX TC3XX的GPIO模块 第一次接触英飞凌AURIX TC3XX系列MCU时&#xff0c;我被它强大的GPIO功能惊艳到了。这不仅仅是一个简单的数字输入输出接口&#xff0c;而是集成了多种高级特性的硬件模块。在实际汽车电子项目中&#xff0c;比如氛围灯控制、状态指示灯等场景&a…...

Cursor功能增强工具使用指南

Cursor功能增强工具使用指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial request limit. / Too many free t…...

Llama-3.2V-11B-cot应用场景:跨境电商多语言商品图信息提取案例

Llama-3.2V-11B-cot应用场景&#xff1a;跨境电商多语言商品图信息提取案例 1. 项目背景与价值 跨境电商平台每天需要处理海量商品图片&#xff0c;传统人工标注方式面临三大痛点&#xff1a; 语言障碍&#xff1a;商品图可能包含多种语言的文字信息效率瓶颈&#xff1a;人工…...

K8s Ingress实战:如何为静态资源开启Gzip压缩和Cache Control(附完整ConfigMap配置)

Kubernetes Ingress高级配置&#xff1a;静态资源Gzip压缩与缓存策略实战指南 在当今快节奏的数字化体验中&#xff0c;网页加载速度直接影响用户留存率和转化率。根据行业研究&#xff0c;页面加载时间每增加1秒&#xff0c;可能导致转化率下降7%。作为Kubernetes运维专家&…...

解锁光猫配置自由:中兴ONT解密工具完全指南

解锁光猫配置自由&#xff1a;中兴ONT解密工具完全指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 你是否曾经因为无法修改光猫设置而感到束手无策&#xff1f;当运营…...

Word自动编号的隐藏玩法:用题注和交叉引用,打造能“自我修复”的智能文档

Word文档工程化&#xff1a;构建自动编号与交叉引用的智能系统 在技术文档撰写过程中&#xff0c;最令人头疼的莫过于图表编号的维护。当你在200页的文档中插入新图表时&#xff0c;手动编号意味着要逐个修改后续所有编号和引用——这种痛苦只有经历过的人才懂。但很少有人意识…...

XCZU67DR的PS和PL怎么协同干活?一个案例讲透ARM核与FPGA联动处理高速ADC数据流

XCZU67DR异构计算实战&#xff1a;ARM核与FPGA协同处理5.9G ADC数据流的架构设计 在当今信号处理领域&#xff0c;实时处理高速ADC数据流已成为雷达、通信和医疗成像等应用的核心需求。当采样率攀升至5.9G级别时&#xff0c;传统CPU或FPGA单独处理的架构往往捉襟见肘。这正是Xi…...

给黑帮写反侦测系统:他们在暗网给我立生祠

作为一名软件测试工程师&#xff0c;我从未想过&#xff0c;我的专业技能会让我卷入一场数字世界的道德深渊。故事始于一个匿名加密邮件&#xff0c;主题简洁却充满诱惑&#xff1a;“高薪项目&#xff1a;反侦测系统开发。”客户承诺丰厚报酬&#xff0c;并强调需要顶尖测试思…...

Qt5新手必看:3分钟搞定你的第一个控制台程序(附完整代码)

Qt5入门实战&#xff1a;从零构建控制台应用的完整指南 引言&#xff1a;为什么选择Qt5作为开发起点&#xff1f; 对于刚接触C图形界面开发的程序员来说&#xff0c;Qt框架提供了一个绝佳的起点。它不仅拥有跨平台特性&#xff0c;还具备完善的工具链和丰富的模块库。控制台程序…...

为什么你的Mojo-Python FFI在M1芯片上必崩?苹果Silicon专属ABI陷阱与跨架构符号绑定修复指南(含Clang插件源码)

第一章&#xff1a;为什么你的Mojo-Python FFI在M1芯片上必崩&#xff1f;Mojo-Python FFI&#xff08;Foreign Function Interface&#xff09;在 Apple M1 及后续 ARM64 架构芯片上崩溃&#xff0c;根源并非配置疏忽&#xff0c;而是底层 ABI 不兼容与运行时符号解析机制的双…...