![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
algsup
这个作者很懒,什么都没留下…
展开
-
[排序]leetcode1636:按照频率将数组升序排序(easy)
【代码】[排序]leetcode1636:按照频率将数组升序排序(easy)原创 2022-09-19 21:58:25 · 361 阅读 · 0 评论 -
[记忆化dfs][排序]leetcode1387:将整数按权重排序(medium)
思路:记忆化 dfs + 排序。原创 2022-09-14 07:58:47 · 249 阅读 · 0 评论 -
[基数排序]leetcode2343:裁剪数字后查询第 K 小的数字(medium)
代码】[基数排序]leetcode2343裁剪数字后查询第K小的数字(medium)原创 2022-07-23 11:58:28 · 199 阅读 · 0 评论 -
[基数排序]leetcode164:最大间距(hard)
代码】[基数排序]leetcode164最大间距(hard)原创 2022-07-23 11:14:47 · 162 阅读 · 0 评论 -
[基数排序]leetcode912:排序数组(medium)
代码】[基数排序]leetcode912排序数组(medium)原创 2022-07-23 11:08:16 · 148 阅读 · 0 评论 -
[下标排序]leetcode506:相对名次(easy)
题目:题解:思路:排序给数组中的元素按下标由大到小进行排序,然后给排序好的下标依次从等级 1 开始颁奖。代码如下:class Solution {public: unordered_map<int,string> dict={{1,"Gold Medal"},{2,"Silver Medal"},{3,"Bronze Medal"}}; vector<string> findRelativeRanks(vector<int>&a原创 2022-02-20 20:08:58 · 407 阅读 · 0 评论 -
[根据下标排序+贪心]leetcode2136:全部开花的最早一天(hard)
题目:题解:思路:贪心代码如下:class Solution {public: int earliestFullBloom(vector<int>& plantTime, vector<int>& growTime) { vector<int> id(growTime.size()); // 用id存的是growTime的下标,用来给growTime排序的下标值 iota(id原创 2022-02-20 19:39:43 · 597 阅读 · 0 评论 -
[排序]leetcode969:煎饼排序(medium)
题目:题解:思路:采用冒泡排序的思想,每次循环将最大值下沉到水底。由于题目要求我们进行反转,所以我们每次循环找到当前序列 [0,i-1] 中最大值的位置 idx,然后将 [0,idx] 内的元素进行反转,这样最大值就排到下标 0 的位置了;最后将 [0,i-1] 内的所有元素进行反转,这样最大值就下沉到水底 i-1 的位置了。代码如下:class Solution {public: vector<int> pancakeSort(vector<int>&原创 2022-02-19 10:56:07 · 253 阅读 · 0 评论 -
[排序]leetcode6005:使数组变成交替数组的最少操作数(medium)
题目:题解:思路:这题自己算法思路都懂,就是编码时找最大值和此最大值出了问题,导致没 ac,真难受。。。1)用两个hashmap分别记录奇数下标和偶数下标中相同的元素个数,由于 hashmap 不能直接使用 sort,必须装到 vector 中按频率由大到小排序,同时若hashmap中的元素个数不足两个补齐 [0,0] 即可。2)设奇数下标和偶数下标中数量的最大值分别是x、y,次最大值为x1、y2,若x!=y,则需要替换的元素个数为n-cnt(x)-cnt(y);若x==y,则需要替换的元原创 2022-02-13 18:45:10 · 592 阅读 · 0 评论 -
[归并排序]leetcode493:翻转对(hard)
题目:题解:思路:利用归并排序的思想,对两个升序子序列进行统计翻转对的个数。1)对于a[l…mid,mid+1…r]中的左右两段 a[l…mid] 和 a[mid+1…r],我们利用指针 i 来遍历左半序列,利用指针 j 来遍历右半序列,由于 a[i] 具有单调性,之前的 a[i] > 2*a[j],我们只有将指针 j 不断右移才能寻找大于 a[i+1]的,满足 j 不断右移的条件。代码如下:const int N = 50010;int b[N];class Soluti原创 2022-02-02 19:14:52 · 542 阅读 · 0 评论 -
[归并排序]leetcode327:区间和的个数(hard)
题目:题解:思路:归并排序1)对于区间和的快速求解需要使用前缀和,由于 a 中的元素有正有负,所以前缀和数组不是单调递增的,我们可以对前缀和数组进行归并排序,顺便计算区间和的个数,求 pre[j]-pre[i]∈[lower,upper] 的 (i,j) 的个数。2)思考如何利用两个升序数组n1,n2求出n2[j]-n1[i]∈[lower,upper]?3)在解决这一问题后,原问题就迎刃而解了:我们采用归并排序的方式,能够得到左右两个数组排序后的形式,以及对应的下标对数量。对于原数组而原创 2022-02-02 17:03:11 · 752 阅读 · 0 评论 -
[归并排序]剑指 Offer 51. 数组中的逆序对(hard)
题目:题解:思路:归并排序的模板题,在递归处理两个升序子序列时,a[l…r] 中的左序列 a[l…mid] 和右序列 a[mid+1,r] 利用两个指针 i 和 j 在合并时,顺便进行统计逆序对个数。若 a[i]>a[j],由于 a[l…r] 是升序的,那么 a[i…mid]之间的所有元素都会大于 a[j],统计此时的个数为 mid-i+1 即可。代码如下:const int N = 5e5+10;int b[N];class Solution {public: int原创 2022-02-02 16:42:20 · 125 阅读 · 0 评论 -
[排序]leetcode1996:游戏中弱角色的数量(medium)
题目:题解:代码如下:class Solution {public: int numberOfWeakCharacters(vector<vector<int>>& pro) { // 若攻击值相等,我们按防御值由小到大排序;若攻击值不同,我们按攻击值由大到小排序 sort(pro.begin(),pro.end(),[](const auto& a,const auto& b){原创 2022-01-28 14:27:28 · 4437 阅读 · 0 评论 -
[排序]leetcode274:H指数(medium)
题目:题解:前言:是不是读完题目还是一脸懵逼?是的,这道题翻译的有问题,其实应该跟论文量有关,就是说输出的论文数要小于等于引用次数。排序思路:先将数组排序,然后数组长度 - 下标(n-i=h)表示有h篇论文至少引用citation[i]次,剩下的n-h篇论文的引用数不多于citation[i]次(因为数组已排序),即[0,i-1]范围内的论文引用数小于等于citation[i]次,[...原创 2019-12-25 23:49:14 · 292 阅读 · 0 评论 -
[插入排序]leetcode147:对链表进行插入排序(medium)
题目:147. 对链表进行插入排序题解:插入排序注意对于这种打乱链表顺序的题,我们一般都要设置哑节点dummy。思路:我们每次用head->next来进行插入排序,每次插入排序,我们需要从链表的头部开始寻找插入点,所以我们使用一个指针pre来寻找插入点,若pre->next的节点值大于等于head->next的节点时,我们的插入位置就是pre->next,...原创 2019-12-23 11:41:46 · 583 阅读 · 0 评论 -
[归并排序]leetcode148:排序链表(medium)
题目:题解:大家就看看大佬的题解吧,我肯定没大佬讲的好。算法伪代码:current = dummy.next;tail = dummy;for (step = 1; step < length; step *= 2) { while (current) { // left->@->@->@->@->@->@->null ...原创 2019-12-23 10:58:18 · 617 阅读 · 0 评论 -
[三路排序]leetcode75:颜色分类(medium)
题目:题解:三路排序指针zero用来表示0的最右边界,指针two用来表示2的最左边界,指针i指向当前元素。若nums[i]==2,我们需要交换指针two、i所指向的元素值,并将two指针左移若nums[i]==0,我们需要交换指针zero、i所指向的元素值,并就zero和i同时右移若nums[i]==1,我们仅仅只需要将i指针右移即可题解:class Solution {...原创 2019-12-20 15:48:39 · 191 阅读 · 0 评论 -
[排序]leetcode5127:删除被覆盖区间(medium)
题目:题解:排序本题属于56. 合并区间的子题,先对数组元素进行排序,然后进行区间的合并。代码如下:class Solution {public: int removeCoveredIntervals(vector<vector<int>>& intervals) { if(intervals.empty())retur...原创 2019-12-15 08:53:00 · 301 阅读 · 0 评论 -
[排序]leetcode179:最大数(medium)
题目:题解:题解1:STL算法,对数组的元素进行排序,排序的顺序为二者拼接起来大的排在前面题解2:与题解1算法思路一样的,不过没有题解1秀,题解1全程STL算法代码如下:class Solution {public: //题解1:STL算法 string largestNumber_1(vector<int>& nums) { ...原创 2019-12-12 17:28:20 · 198 阅读 · 0 评论