LeetCode_101
千奇百怪的排序算法
快速排序
采用左闭右开的二分写法
归并排序
插入排序
冒泡排序
选择排序
以上代码的调用方式:
快速选择
在一个未排序的数组中,找到第 k 大的数字
快速选择一般用于求解 k-th Element 问题,可以在 O(n) 时间复杂度,O(1) 空间复杂度完成求 解工作。快速选择的实现和快速排序相似,不过只需要找到第 k 大的枢(pivot)即可,不需要对 其左右再进行排序。与快速排序一样,快速选择一般需要先打乱数组,否则最坏情况下时间复杂 度为 O(n 2 )
第K个数算法-CSDN博客
参考之前写的博客
桶排序
桶排序的意思是为每个值设立一个桶,桶内记录这个值出现的次数(或其它属 性),然后对桶进行排序。针对样例来说,我们先通过桶排序得到四个桶 [1,2,3,4],它们的值分别 为 [4,2,1,1],表示每个数字出现的次数。
紧接着,我们对桶的频次进行排序,前 k 大个桶即是前 k 个频繁的数。这里我们可以使用各种 排序算法,甚至可以再进行一次桶排序,把每个旧桶根据频次放在不同的新桶内。针对样例来说, 因为目前最大的频次是 4,我们建立 [1,2,3,4] 四个新桶,它们分别放入的旧桶为 [[3,4],[2],[],[1]], 表示不同数字出现的频率。最后,我们从后往前遍历,直到找到 k 个旧桶。
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> q(cmp);
优先队列的定义
template<class T,class Container = std::vector<T>,class Compare = std::less<typename Container::value_type>
> class priority_queue;
static bool cmp(pair<int, int>& m, pair<int, int>& n) {return m.second > n.second;
}
std::priority_queue 是一个模板类,有三个模板类型参数,分别是:
- 参数1: 优先级队列的元素类型 T ,例如问题里第一个例子,元素类型 T 是 std::pair<int,int> ,后面两个例子,元素类型 T 是 int
- 参数2: 优先级队列内部具体用那种容器(Container) 存储参数1指定的元素类型,例如问题里的 vector< pair<int,int> > 和 vector<int>。实际上,第2个模板参数是有默认类型参数的,默认类型参数是 vector<T> ,T 取决于参数1指定的类型是什么。
- 参数3: 参数3需要指定一个实现了 operator< 操作符的类(叫做仿函数或者函数对象,实际上就是类,只是调用时写起来像函数一样),比较操作符的实现符合 严格弱顺序 strict weak order 语义,请参考资料3。模板参数3也是有默认类型,默认是 std::less<typename Container::value_type> ,其中 Container 指的是参数2,Container::value_type 指的是参数2类内部的声明的其元素值的类型。
- 最后,decltype 用于类型自动推断,传入&cmp函数指针,decltype自动推断出第3个模版参数类型应该是什么。总的来说,如果你的元素类型已经符合严格弱顺序排序,只要自定优先级队列的第1个模版参数即可。
参考博客:
c++优先队列priority_queue(自定义比较函数)_c++优先队列自定义比较_菊头蝙蝠的博客-CSDN博客
c++优先队列(priority_queue)用法详解_吕白_的博客-CSDN博客
练习
排序也可以这样写
sort(vec.begin(), vec.end(), [](const pair<char, int> &a, const pair<char, int> &b) {
return a.second > b.second;
});
一切皆可搜索
深度优先搜索和广度优先搜索是两种最常见的优先搜索方法,它们被广泛地运用在图和树等 结构中进行搜索。
LeetCode_101相关推荐
- 我收藏的谷歌和阿里大佬的刷题笔记
金三银四大家在准备校招.社招,或者闲暇的时候,都可以刷刷 Leetcode,保持良好的手感. 之前刷题,一直觉得漫无目的地刷,效率很低.后来发现了两个刷题笔记,谷歌大佬高畅和BAT大佬霜神写的 Lee ...
- 算法岗SSP offer收割指南!
文 | 林小平 源 | 知乎 前序 在本文开始以前,林小平首先需要声明的是这篇超详细面经并不是笔者本人的求职笔记,它是笔者学校隔壁实验室22届毕业学弟的面试心路历程和经验心得.由于笔者和这位学弟经常讨 ...
- 看完师兄的代码笔记,我失眠了
祝大家中秋节快乐! 最近很多公司的秋季招聘都已经启动了. 想必大家(尤其是经历过求职面试的)都知道,数据结构和算法在求职笔试/面试中的重要性. 纵观如今的互联网公司面试,清一色地都在重点考查这块,不开 ...
- python怎么运行丘比特之箭_test
leetcode_001.py-----python编写一个函数求两数之和 leetcode_002.py-----python编写一个函数求两数相加 leetcode_003.py-----pyth ...
- LeetCode github集合,附CMU大神整理笔记
Github LeetCode集合 本人所有做过的题目都写在一个java项目中,同步到github中了,算是见证自己的进步.github目前同步的题目是2020-09-17日之后写的题.之前写过的题会 ...
- 人类高质量 Java 学习路线【一条龙版】
大家好,我是张讨嫌.现在网上的编程资料实在太多了,而且人人肯定都说自己的最好,那就导致大家又不知道怎么选了.大部分的博主推荐资源,也就是把播放量高的视频说一遍,水一期视频,没有一条很清晰的学习路线. ...
- 怒肝 Java 学习路线一条龙!
文章为转载 请关注鱼皮好友 持续获取 有效学习知识 现在网上的编程资料实在太多了,而且人人肯定都说自己的最好,那就导致大家又不知道怎么选了.大部分的博主推荐资源,也就是把播放量高的视频说一遍,水 ...
- 好教程推荐系列:力扣LeetCode官网/labuladong的算法小抄/漫画算法小灰/刷题模板
LeetCode官网 https://leetcode.com/ https://leetcode-cn.com/ labuladong的算法小抄 刷算法全靠套路,认准 labuladong 就够了! ...
- 算法题——贪心算法(错题总结)
顾名思义,贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 注:以下问题引入是GitHub某位大佬的著作里面的原话,这里仅供各位学习.本书永久免费地址: ...
最新文章
- 查理芒格+终身学习+你的认知就是你的财富的边界
- 差异备份、增量备份、完全备份的区别
- 树莓派python编程案例-树莓派Python编程指南.pdf
- 在RHEL6.6环境下进行LVS-NAT实验(Vmware模式)
- Vue 递归实现树形结构
- 收集 48 个 JavaScript 代码片段,仅需 30 秒就可理解(值得收藏)
- 【原创,提供下载】winfrom 打印表格,字符串的封装
- Java String类的intern()方法
- 原生js写简单轮播图方式1-从左向右滑动
- linux桌面时间插件,Ubuntu gnome 桌面环境拓展插件介绍
- word表格完美复制到excel之浅析
- html 分号的作用,分号的作用是什么
- 毕设/私活/bigold必备项目,一个挣钱的免费的全开源标准前后端分离后台管理权限系统【springboot+vue+redis+Spring Security】脚手架搭建:若依Ruo框架具体使用教程
- Markdown 简单美化
- python读取千万级数据库数据类型_解决python读取几千万行的大表内存问题
- 100Mhz秒脉冲发生器 vivado
- 刚刚,2022中国大学排行榜发布
- selenium入门超详细教程——网页自动化操作
- java jms 消息服务_Java消息服务JMS详解
- DataRow对象的RowState和DataRowVersion属性特点