| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【每日一题】力扣451. 根据字符出现频率排序 -> 正文阅读 |
|
[数据结构与算法]【每日一题】力扣451. 根据字符出现频率排序 |
题目
给定一个字符串 返回 已排序的字符串 。如果有多个答案,返回其中任何一个。 示例 1:
示例 2:
示例 3:
提示:
解题思路👉哈希表 可以根据题目的意思直接求解 用哈希表统计每个字符出现的频次,然后对哈希表进行从大到小排序,再逐个把每个字符按照频次连接,返回连接后的字符串。 虽然思路简单,但是具体的操作过程还是有点麻烦的,尤其对哈希表不熟悉的话就很难实现了。我认为具体的代码实现有下面几个难点:
对于哈希表里的数据类型应该都没什么问题,就是 所以排序哈希表需要遍历哈希表,如果熟悉C++11,那么可以直接使用
C++没有提供模板的排序,所以模板的排序需要自己定义。不过不是完全自己定义,可以用
排序后即可使用该数组将字符放入新的字符串。 👉暴力 还有一种纯暴力的写法,用一个数组存储每个字符的频次,然后用双重循环按频次逐个从大到小找到每个字符。
找到字符后按照字符的频次将字符连入新的字符串。 虽然这种方法很暴力,但是我认为这种方法比第一种方法好一点。虽然是双重循环,但循环的次数最大不会超过 👉桶排序 这才是这题的正解 桶排序相当于是对方法一进行了优化,虽然也使用了哈希表,但是除去了对哈希表的排序,用一种很巧妙的思路解题。 首先还是把字符的频次放入哈希表中,同时找出最大的频次数 这样每个字符的位置就对应着它的频次,可以逆向遍历该数组,然后再遍历每个数组空间里的字符串,根据其对应的频次放入新字符串中。 为什么要遍历数组空间的字符串? 频次相同的字符会放入同一个空间中,所以不能确定一个空间中是否只含有一种字符。 代码(C++)哈希表
暴力
桶排序
总结如果第一种方法对于哈希表的排序不了解,可以多看看哈希表的用法。第二种方法应该是很多人可以想到的,但为了方便估计多数会选择哈希做法。对于桶排序,我觉得还是有点难想到的。总的来说这题不算太难,但也不算太简单,算是一道中等题。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:36:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |