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;
    }
};
相关推荐
颜酱9 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
zone773914 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
CoovallyAIHub17 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub17 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub17 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉
兆子龙18 小时前
前端哨兵模式(Sentinel Pattern):优雅实现无限滚动加载
前端·javascript·算法
CoovallyAIHub21 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库1 天前
手摸手带你安装OpenClaw并对接飞书
算法·架构
一语07161 天前
3分钟搞懂深度学习AI:实操篇:卷积层
人工智能·算法