排序方面遇到的坑 LC2610

news/2025/3/19 10:49:16/文章来源:https://www.cnblogs.com/jyyyyx/p/18780583

题目链接

思路1: O(logN) + O(N)

class Solution {
public:// O(logN) + O(N)vector<vector<int>> findMatrix(vector<int>& nums) {unordered_map<int,int> cnt;for(auto &x : nums) cnt[x] ++ ;sort(nums.begin(), nums.end(), [&](int x, int y){return cnt[x] > cnt[y]; // Problem Here});for(auto &x : nums) cout << x << ' ';   cout << endl;int maxLen = cnt[nums[0]];vector<vector<int>> res(maxLen);for(int i = 0; i < nums.size(); ) {for(int j = 0; j < cnt[nums[i]]; j ++ ) res[j].push_back(nums[i]);i += cnt[nums[i]];}return res;}
};

我的思路是将 nums 进行排序,然后出现次数多的放在前面,出现次数少的放在后面,例如输入 nums=[8,4,3,4,4,6,3,3],我们希望输出 nums=[4,4,4,3,3,3,8,6]。然后就可以遍历同一元素,依次加入每一行。

但实际上,对于该输入,输出 nums=[4,3,4,4,3,3,8,6],可以发现,元素 34 并没有按照我们希望的那样(3 全在前面或者 4 全在前面),而是杂糅到一起了,也就是说,我们的 sort 只是按照元素的 cnt 进行了排序,但是对于 cnt 相同的不同元素,并没有合理排序。

为了解决这个问题,我们希望特殊处理 cnt 相等时的情况,这里只需要稍微修改一下 sort 函数即可:

sort(nums.begin(), nums.end(), [&](int x, int y){if(cnt[x] == cnt[y])    return x < y;return cnt[x] > cnt[y]; 
});

思路2:O(N)+O(N)

不过我们其实可以发现,上面对 nums 进行排序的行为有些画蛇添足了,因此我们并没有让 nums 按照 cnt 排序的需求。事实上,我们可以直接利用 cnt 数组。

class Solution {
public:vector<vector<int>> findMatrix(vector<int>& nums) {unordered_map<int,int> cnt;vector<vector<int>> res;for(auto &x : nums) ++ cnt[x];int idx = 0, n = nums.size();while(idx < n) {vector<int> path;for(auto &it : cnt) {if(it.second) {-- it.second, ++ idx, path.push_back(it.first);}}res.push_back(path);}return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/901412.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

助你玩转——4G模组Air780EPM的GPIO设计~

本文将结合Air780EPM的硬件架构与软件框架,从管脚分配、电气特性、复用机制、代码开发四个维度,深入解析GPIO设计的全流程要点,为开发者提供从理论到实践的完整技术指南。 一、概述 开发方式:Air780EPM 仅支持 LuatOS 软件开发方式,不支持 AT 指令开发方式。若使用 AT 指令…

【Java】XxlJob入门

xxl-job概念 xxlJob是轻量级的可视化分布式任务调度平台,适用于中小型企业。主要特性如下:简单、动态、轻量级、支持弹性扩容缩容、事件全异步执行、跨语言。 调度中心和执行任务解耦 调度任务支持多种不同场景的路由策略、容错策略、触发策略 运维更便捷环境准备和部署 Gith…

快速掌握!4G模组:Air780EPM 天线设计说明

天线设计,也是4G模组应用中最容易踩坑的地方。今天主要分享讨论Air700ECQ/EAQ/EMQ系列模组,天线管脚到4G天线之间的电路设计和走线规则。 Air700ECQ/EAQ/EMQ模组属于Cat.1 bis R13架构,天线架构精简为单天线架构,去掉了分集接收天线,因此只需要一根天线。 知识点: Cat.1 …

24级数应二班课堂作业2

2024010068 刘晓津 几年几月多少天year = int(input("请输入年份: ")) month = int(input("请输入月份: "))if month in [1, 3, 5, 7, 8, 10, 12]:days = 31 elif month in [4, 6, 9, 11]:days = 30 elif month == 2:if (year % 4 == 0 and year % 100 != …

简谈如何用纳米压印技术制备测序芯片-测序芯片-flowcell-代加工-外协加工-委外加工-激光代加工-河南郑州-芯晨微纳(河南)

利用纳米压印技术(Nanoimprint Lithography, NIL)制备测序芯片(如DNA测序芯片或生物传感器芯片)的核心在于通过高精度模板在基材上高效复制纳米级结构,从而构建用于捕获、固定或检测生物分子的功能表面。以下是具体步骤和关键技术要点:测序芯片的功能需求 测序芯片通常需…

SpringSecurity5(7-会话管理)

Spring Security 的会话管理可控制用户身份验证的会话行为,支持并发会话限制、防止会话固定攻击(Session Fixation)、会话超时控制等。可结合 Redis 实现分布式会话共享,提升安全性与用户体验,适用于高并发应用场景。会话管理 http.sessionManagement()invalidSessionUrl(…

jstat--java内存分析工具

jstat利用JVM内建的指令对应用程序的资源和性能实时的命令行监控,包括堆大小和垃圾回收状况。命令## n1 刷新时间 n2 总共输出次数 jstat -gcutil pid n1 n2说明S0 :s0已使用的容量占比 S1:s1已使用的容量占比 E:eden已使用容量占比 O:老年代已使用容量占比 CCS:压缩类…

AI与.NET技术实操系列(八):使用Catalyst进行自然语言处理

引言 自然语言处理(Natural Language Processing, NLP)是人工智能领域中最具活力和潜力的分支之一。从智能客服到机器翻译,再到语音识别,NLP技术正以其强大的功能改变着我们的生活方式和工作模式。 Catalyst的推出极大降低了NLP技术的应用门槛。它支持文本分类、实体识别等…

ACT中使用正则表达式验证UI展示

近在编写ACT的过程中,遇到校验UI的展示校验,要求数据由Number+空格+base unit进行展示。同事分享了一份参考方法如下图:最终在方法里面使用如下: Public void functionName(String verifyContent) throw exception{String regex = \\d+\\s\\S+;Controller.assertTrue(Pat…

【GreatSQL优化器-17】DYNAMIC RANGE

【GreatSQL优化器-17】DYNAMIC RANGE 一、DYNAMIC RANGE介绍 GreatSQL 的优化器有一种扫描方式是动态范围扫描方式,类似于“已读乱回”模式,这种模式是在表有多个索引的情况下,对驱动表连接的时候部分选择索引的情况。优化器没有找到好的索引可以使用,但发现在知道前面表的…

20244225 《python程序设计》实验一报告

课程:《Python程序设计》 班级: 2442 姓名: 孟雨欣 学号:2024422 实验教师:王志强 实验日期:2024年3月18日 必修/选修: 公选课 一、实验内容 1.熟悉Python开发环境; 本次实验使用pycharm作为开发环境,首先在官网下载并安装PyCharm社区版,安装完成后打开软件,创建一个…

(收藏)UniGUI学习之UniDBGrid常用方法(转载)

1]DataSource设置 2]显示MEMO类型里的文字3]显示悬浮提示4]显示当前记录及总记录数5]读取所有记录,及分页6]在前面加上序号列,并设置序号字体大小,所有单元格 字体大小,垂直居中7]不显示标题栏8]点击表头,单列排序UniDBGrid1ColumnSort9]编辑 和 更新 数据10]获得某单元格里…