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

题目描述:373. 查找和最小的 K 对数字

题解

直观的思路是每一个结点都向右侧和下侧扩展,但是这种方案会引起重复。

修正后的方案是将第一列结点添加入heap中后,每次取数据后只向右侧进行扩展。

cpp 复制代码
class Solution {
public:
    struct node
    {
        int val;
        int x, y;

        // 取巧定义比较函数
        bool operator < (const node& other) const
        {
            return val > other.val;
        }
    };

    node Add(int val, int x, int y)
    {
        return node{ val, x, y };
    }

    // K对最小数组
    vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) 
    {
        // 默认为大顶堆,但是定义特殊比较函数,因此为小顶堆
        priority_queue<node> q;
        vector<vector<int>> ans;
        int n, m;
        n = nums1.size(); m = nums2.size();
        for (int i = 0; i < min(k, n); i++)
        {
            q.push(Add(nums1[i]+nums2[0], i, 0));
        }
        while (!q.empty() && k)
        {
            node tmp = q.top(); q.pop(); 
            k--;
            int x, y;
            x = tmp.x, y = tmp.y;
            ans.push_back({nums1[x], nums2[y]});
            // 只进行向右侧进行扩展
            if(y < m-1)
                q.push(Add(nums1[x] + nums2[y + 1], x, y + 1));
        }
        return ans;
    }
};
相关推荐
星星.72211 小时前
C++算法竞赛|二分查找与二分答案:边界模板、浮点二分、STL
数据结构·c++·算法
sel_911 小时前
【OPD论文导读(二)】OPD(On-Policy Distillation)全景调研:十篇论文讲透“在自己生成的内容上学习“这件事
人工智能·python·深度学习·学习·算法·语言模型
金幄科技12 小时前
RAG第四篇:重排序 Rerank——粗召回之后,为什么还需要一次精排
人工智能·算法·ai·ai编程
M78佐菲12 小时前
Linux学习笔记:文件IO
linux·笔记·学习·算法
lhldsg13 小时前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
BSD_HY13 小时前
薄膜开关矩阵扫描电路设计中的防鬼键措施
人工智能·算法·矩阵·人机交互·薄膜开关·源头工厂·深圳工厂
linux-hzh13 小时前
百日算法修炼 · Day 17
数据结构·算法
XUEYUAN521213 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
sel_913 小时前
【多轮对话论文导读(七)】多轮对话论文阅读笔记:从数据生成、用户模拟到上下文重构与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·语言模型·自然语言处理
远游客071313 小时前
为什么用「年×100+月」做比较
算法·gin