算法学习 -- 多路归并

思想 :

抽象出来一个例子 : 合并k个长度相等升序列表 :

抽象成一张表也就是 :

做法 : 用一个小根堆来维护 , 首先将每个序列的第一个元素放入队列中 , 然后模拟,每次取出队头,作为结果序列的下一个元素 , 然后向堆中存入该元素序列中的下一个元素 ,直到所有元素取完为止;

例题 :

1262 - 鱼塘钓鱼

1262. 鱼塘钓鱼 - AcWing题库

c++代码 :

复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 110 ;
typedef pair<int, int> PII;
int a[N] , b[N] , c[N] ;
int n , T ;

int main(){
    cin >> n ; 
    for(int i=1;i<=n;i++) cin >> a[i] ;
    for(int j=1;j<=n;j++) cin >> b[j] ;
    for(int k=2;k<=n;k++) cin >> c[k] , c[k] += c[k-1] ;
    cin >> T ;
    int ans = 0 ;
    // 只在前k个池塘钓鱼
    for(int i=1;i<=n;i++){
        int t = T - c[i] ; // 本次钓鱼专用时间 
        priority_queue<PII> que ;
        for(int j=1;j<=i;j++) que.push({a[j],j}) ;
        int res = 0 ;
        while(!que.empty() && t > 0){
            auto it = que.top() ; que.pop() ;
            int x = it.first , idx = it.second ; // 获取元素和下标
            res += x ;
            int xx = x - b[idx] ;
            if(xx > 0) que.push({xx , idx}) ;
            t -- ;
        }
        ans = max(ans , res) ;
    }
    cout << ans << endl ;
}

62 . 丑数

62. 丑数 - AcWing题库

复制代码
class Solution {
public:
    int getUglyNumber(int n) {
        if(n <= 1) return n;
        vector<int> f(1,1);
        int i = 0, j = 0, k = 0;
        long long t = 0;
        while(--n)
        {
            t = min(f[i] * 2, min (f[j] * 3, f[k] * 5));
            if(t == f[i] * 2) i++;
            if(t == f[j] * 3) j++;
            if(t == f[k] * 5) k++;
            f.push_back(t);
        }
        return f.back();
    }
};

参考 : 多路归并算法从理论到应用(易懂)-CSDN博客

相关推荐
嵌入式×边缘AI:打怪升级日志3 分钟前
从零开始学习 Linux SPI 驱动开发(基于 IMX6ULL + TLC5615 DAC)
linux·驱动开发·学习
时空自由民.12 分钟前
嵌入式学习-构建系统(图形化IDE/Kconfig/手动makefile Cmake)
数据库·ide·单片机·学习
2301_7809438417 分钟前
第二阶段:Gem5基础学习
学习
我想我不够好。29 分钟前
坚持到习惯为止
学习·学习方法
三品吉他手会点灯1 小时前
STM32F103 学习笔记-21-串口通信(第4节)—串口发送和接收代码讲解(下)
笔记·stm32·单片机·嵌入式硬件·学习
U盘失踪了1 小时前
学习记录:requests Django登录测试脚本(解决CSRF、重定向问题)
笔记·python·学习·django·csrf
minglie11 小时前
人的性质辨析
学习
zhangrelay1 小时前
三分钟云课实践速通--线性代数--python版--矩阵
linux·笔记·python·学习·线性代数·ubuntu·矩阵
xuhaoyu_cpp_java1 小时前
Mybatis学习(四)
java·经验分享·笔记·学习·mybatis
不灭锦鲤1 小时前
网络安全学习第171天
学习·安全·web安全