首页 > 其他分享 >《力扣面试150题》题单拓展——堆

《力扣面试150题》题单拓展——堆

时间:2023-11-29 13:34:27浏览次数:28  
标签:150 int auto 力扣 vector 题单 nums1 nums2 cmp

《力扣面试150题》题单拓展——堆

一、堆

困难题:找K小,先考虑二分法

  1. 基础知识
//优先队列:
priority_queue<int, vector<int>, greater<int>> q; // 小根堆
priority_queue<int, vector<int>, less<int>> q; // 小根堆
  1. 优先队列自定义比较函数
//1, 小根堆
bool cmp(vector<int> &a,vector<int> &b){	
	return a[0] > b[0];	
}
int main(){
    priority_queue<vector<int>, vector<vector<int>>, decltype(&cmp)> q(cmp);
}

//2, 小根堆
auto cmp = [&](auto &a,auto &b){
    return nums1[a.first]+nums2[a.second] > nums1[b.first]+nums2[b.second];
};
priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(cmp)> q(cmp);
  1. 多路归并

将初始范围内的数组都丢到优先队列里面,不断找到最好的,再去判断哪些新数据可能会产生,再次加入优先队列

373.查找和最小的K对数字

378.有序矩阵中第K小的元素

初始位置是一列,判断下标加入行内就可以

786.第K个最小的素数分数

初始位置是[0]和[i],不断判断出来的pair.first+1,加入即可

1439.有序矩阵中的第K个最小数组和

两种方法:①二分 ②能够将多列转换为两列,求解

//范例模版
class Solution {
public:
    vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {
        auto cmp = [&](auto &a, auto &b){
            return nums1[a.first]+nums2[a.second] > nums1[b.first]+nums2[b.second];
        };
        vector<vector<int>> ans;
        int n = nums1.size(), m = nums2.size();
        priority_queue< pair<int,int>, vector<pair<int, int>>, decltype(cmp)> q(cmp);    

        //可以作为一个优化思路是,将较短的数组作为nums1,这样建立小根堆的时候可以减少时间,同时后续比较调整的时候,数据量也会比较小

        for(int i=0; i<min(n, k); i++){			//初始的一堆加入优先队列
            q.push({i, 0});
        }
        while(q.size() && ans.size() < k){
            auto [a,b] = q.top();
            q.pop();
            ans.push_back({nums1[a], nums2[b]});    //现在出来的一定是最小的,结算
            if(b+1 < m)
                q.push({a, b+1});   //会产生哪些可能位,进去池子排序
        }
        return ans;
    }
};
  1. 多路归并+索引排序——iota()

502.IPO

下标索引排序,优先队列,每次将能力内的都加入进去,即可

//带着下标进行排序
vector<int> index(n);
iota(index.begin(), index.end(), 0);
sort(index.begin(), index.end(), [&](int i, int j){ return capital[i] < capital[j]; });

标签:150,int,auto,力扣,vector,题单,nums1,nums2,cmp
From: https://www.cnblogs.com/cyl018/p/17864632.html

相关文章

  • 力扣907. 子数组的最小值之和(单调栈)
    给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。由于答案可能很大,因此 返回答案模 10^9+7 。 示例1:输入:arr=[3,1,2,4]输出:17解释:子数组为[3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。最小值为3,1,2,4,1,1,2,1,1,1,和......
  • 从 15000 家参赛企业脱颖而出,涛思数据荣获中国创新创业大赛“优秀企业”
    近年来,以大数据、人工智能、物联网、新型显示、高性能集成电路、5G通信、云计算等为代表的创新技术加速突破应用,在传统行业的数字化转型进程中发挥着重要作用,催生出一系列新产品、新技术、新业态,形成了强劲的数字经济发展新动能。在此背景下,2023第十二届中国创新创业大赛新一代信......
  • ACM中的组合计数题单好题汇总(持续更新中)
    前言:这里会分享一些精妙的组合计数题,此类题往往需要选择合适的计数集合的划分方式,有些计数角度的精妙,个人感觉没有做过相对的题目,或者是计数感足够犀利,实在是很难想到正确的角度,所以这里会汇总一些有趣的计数题,希望可以帮助到一部分人ARC168C-SwapCharacte......
  • [Codeforces] CF1506C Epic Transformation
    EpicTransformation-洛谷算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死题意你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:选择 \(i,j\) 满足 \(*a_i\neqa_j*\) 然后删除 \(*a_i,a_j*\) 两个数。求序列 a 经过若干次操作后最少......
  • Oracle DBA遇到的top150个问题
    作为OracleDBA(数据库管理员),以下是更多常见的Oracle数据库管理中可能遇到的150个问题案例:数据库备份和恢复失败数据库性能下降数据库连接问题长时间运行的查询和死锁数据库服务器崩溃或宕机数据库空间不足数据库日志文件过大数据库表空间损坏数据库安全漏洞数据库版本升......
  • 力扣刷题随笔
    力扣刷题随笔回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false输入:head=[1,2,2,1]输出:true输入:head=[1,2]输出:false链表中节点数目在范围[1,105]内0<=Node.val<=9本题的思路就是利用双指针的方法来比......
  • CF1506C Epic Transformation
    CF1506CEpicTransformationEpicTransformation-洛谷算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死题意你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:选择 \(i,j\) 满足 \(a_i\neqa_j\) 然后删除 \(*a_i,a_j*\) 两个数。求序......
  • CSC3150 指令集
    一个简单且类似Unix的教学操作系统,作为指导您实现间接块以支持大文件管理。在现有实现时,单个间接块可以处理对大文件无效的有限块经营在这个分配中,您将把xv6文件的最大大小增加实现用于进一步扩展的双重间接块。我们建议您在编写代码之前先阅读第8章:文件系统。准备工作mkfs程序......
  • 基于增强型ARM Cortex M0+内核平台的MSPM0G1106TRHBR、MSPM0G1507SRHBR混合信号微控制
    一、MSPM0G1106TRHBR 基于增强型Arm®Cortex®-M0+32位内核,具有64KB闪存、80MHz频率MSPM0G110x微控制器(MCU)属于MSP高度集成的超低功耗32位MCU系列,该MCU系列基于增强型Arm®Cortex®-M0+32位内核平台,工作频率最高可达80MHz。这些成本优化型MCU提供高性能模......
  • 11月题单
    洗白的迷宫跳转链接T167831洗白的迷宫要点深度优先搜索,记得维护路径!!(不会返回原路)代码#include<iostream>#include<cstdio>#include<cstring>#include<queue>usingnamespacestd;constintN=60;typedefpair<int,int>PII;charmap[N][N];intpath[N][......