C++ | Leetcode C++题解之第373题查找和最小的K对数字

news2024/11/16 7:38:07

题目:

题解:

class Solution {
public:
    vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {
        int m = nums1.size();
        int n = nums2.size();
        auto count = [&](int target){
            long long cnt = 0;
            int start = 0;
            int end = n - 1;
            while (start < m && end >= 0) {
                if (nums1[start] + nums2[end] > target) {
                    end--;
                } else {
                    cnt += end + 1;
                    start++;
                }
            }
            return cnt;
        };

        /*二分查找第 k 小的数对和的大小*/
        int left = nums1[0] + nums2[0];
        int right = nums1.back() + nums2.back();
        int pairSum = right;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (count(mid) < k) {
                left = mid + 1;
            } else {
                pairSum = mid;
                right = mid - 1;
            }
        }

        vector<vector<int>> ans;
        int pos = n - 1;
        /*找到小于目标值 pairSum 的数对*/
        for (int i = 0; i < m; i++) {
            while (pos >= 0 && nums1[i] + nums2[pos] >= pairSum) {
                pos--;
            }
            for (int j = 0; j <= pos && k > 0; j++, k--) {
                ans.push_back({nums1[i], nums2[j]});
            }
        }
        /*找到等于目标值 pairSum 的数对*/
        pos = n - 1;
        for (int i = 0; i < m && k > 0; i++) {
            int start1 = i;
            while (i < m - 1 && nums1[i] == nums1[i + 1]) {
                i++;
            }
            while (pos >= 0 && nums1[i] + nums2[pos] > pairSum) {
                pos--;
            }
            int start2 = pos;
            while (pos > 0 && nums2[pos] == nums2[pos - 1]) {
                pos--;
            }
            if (nums1[i] + nums2[pos] != pairSum) {
                continue;
            }
            int count = (int) min((long) k, (long) (i - start1 + 1) * (start2 - pos + 1));
            for (int j = 0; j < count && k > 0; j++, k--) {
                ans.push_back({nums1[i], nums2[pos]});
            }
        }
        return ans;
    }

    long min(long num1, long num2) {
        return num1 <= num2 ? num1 : num2;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么用AI生成PPT演讲稿?5个方法教你快速生成

想象一下&#xff0c;你正在准备一场关于“墨西哥是如何走到今天这一步的”演讲&#xff0c;而你却苦于如何将复杂的历史背景、经济变迁以及文化特色等内容有机地整合进一份PPT中。 这时候&#xff0c;一款好的AI自动生成PPT的工具就能派上用场了。它不仅能够帮助你快速构建起…

C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤

前言 嗨&#xff0c;各位码农们&#xff01;今天我们要来聊聊如何在 C# 的 WinForms 应用程序中用 MDI&#xff08;Multiple Document Interface&#xff09;模式来优雅地管理多个子窗体。 如果你曾经对着一堆乱七八糟的窗体不知所措&#xff0c;或者想要让你的应用程序看起来…

基于SpringBoot的线上教学平台系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言 Java 数据库 MySQL 技术 SpringBoot框架&#xff0c;Java语言 工具 IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员功能模块 学员功能模块 前台首页…

16行为型设计模式——策略模式

一、策略模式简介 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列的算法&#xff0c;将每一个算法封装起来&#xff0c;并使它们可以相互替换。具体的算法选择交由客户端决定&#xff0c;即不同的算法可以在运行时动态地&a…

后端微服务架构:构建分布式博客系统

后端微服务架构&#xff1a;构建分布式博客系统 在当今的软件开发领域&#xff0c;微服务架构已经成为构建可扩展、灵活且易于维护的应用程序的主流选择。本文将探讨如何利用微服务架构来设计和实现一个分布式的博客系统。 1. 微服务架构简介 微服务架构是一种将应用程序分解…

练习题 期望dp

题目 分析&#xff1a; 首先注意到期望有线性性&#xff1a; E ( a b ) E ( a ) E ( b ) E(ab)E(a)E(b) E(ab)E(a)E(b)&#xff0c;其中 a a a、 b b b不要求相互独立。 因为网上很多地方的证明不严谨&#xff0c;所以这里证明一下&#xff1a; E ( a b ) ∑ i i ⋅ P …

C语言基础(十八)

1、共用体&#xff08;Union&#xff09;是一种特殊的数据类型&#xff0c;也被称为联合体&#xff0c;它允许在相同的内存位置存储不同的数据类型&#xff0c;每次只能存储其中一种类型的值。共用体是一种数据结构&#xff0c;多个不同类型的变量能够共享同一段内存空间。在C语…

OpenAI推出新功能:GPT-4o正式上线微调功能,限时免费!

GPT-4o正式上线微调功能&#xff0c;限时免费&#xff01; 每个组织每天可以免费获得多达100万个训练token&#xff0c;活动将持续到9月23日。 这意味着开发者们现在可以利用自定义数据集对GPT-4o进行微调&#xff0c;从而以较低的成本构建自己的应用程序。 据悉&#xff0c;G…

推荐3款在Windows系统上运行流畅、音质出众的音乐播放器

foobar2000 Foobar2000是一款由原Winamp开发公司的Peter Pawlowski开发的免费多功能音频播放器&#xff0c;具有高度定制化和丰富的功能。它支持多种音频格式&#xff0c;包括MP3、AAC、WMA、FLAC、WAV等&#xff0c;并且可以进行音频转码和格式转换。此外&#xff0c;Foobar20…

C盘满了,如何清理C盘

目录 磁盘清理删除休眠文件查看系统盘的存储占比卸载掉安装在系统盘的软件更改临时文件、文档等的存储位置 磁盘清理 选择自己的系统盘&#xff0c;我的是G盘。清理系统文件删除休眠文件 删除休眠文件 管理员打开cmd powercfg -h off 直接减少几个g的C盘占用 查看系统盘的存储…

世媒讯海外发稿:全球知名的中文媒体平台

新闻媒体网站专注于媒体行业中各类新闻的网站&#xff0c;也是网友最爱访问的网站类型之一。以下是一些知名的中文媒体平台&#xff0c;它们不仅提供华文内容&#xff0c;还具有较高的访问量和影响力。以下是十大可发布中文新闻稿的知名媒体&#xff0c;包括其月访问量、地区排…

【连续4届EI稳定检索】第五届计算机工程与智能控制学术会议(ICCEIC 2024,10月11-13)

第五届计算机工程与智能控制学术会议&#xff08;ICCEIC 2024&#xff09;将于2024年10月11日至13日在广州举办&#xff0c;聚焦计算机工程与智能控制前沿&#xff0c;涵盖网络安全、硬件系统、软件工程、嵌入式创新等多个核心议题及交叉学科研究。 ICCEIC 2024将计算机工程和智…

QT 程序直接崩溃The program has unexpectedly finished.

QT报错比较难处理&#xff0c;因为给出的控制台输出太宽泛甚至没有信息。 遇到当遇到这种直接崩溃的&#xff0c;试着把一些代码注释掉&#xff0c;慢慢试出出错的位置 。 这里有一种可能的原因是因为有些变量没有初始化&#xff0c;就直接使用。 如下图&#xff1a; 当我运…

【Java】/* 二叉树 - 底层实现*/

一、前序遍历 - 递归 /* 1. 前序遍历 - 递归 */public void preOrder(TreeNode root) {//1. 如果根节点为nullif (root null) {return;}//本意&#xff1a;打印树的根&#xff0c;左&#xff0c;右节点//2. 打印根节点的值System.out.print(root.val " ");//3. 如…

X86 PVE 下安装路由存储系统iStoreOS

简介 iStoreOS是一个比较易用的路由存储系统&#xff0c;它能让你获得更好的网络及 存储的体验。 系统本身开源免费&#xff0c;目前系统代码开源在&#xff1a;Github iStoreOS 下载固件 固件下载&#xff1a;https://fw.koolcenter.com/iStoreOS/x86_64/ istoreos-22.03.7…

数据结构——顺序表和单链表

数据结构 基本概念&#xff1a; 数据结构是一门研究如何有效组织数据&#xff0c;并提高数据处理效率的学科。通过研究各种数据内部的逻辑关系&#xff0c;使用某种特定的存储形式&#xff0c;并在此基础上对数据实施各种操作&#xff0c;这些工作被称为称为广义上的算法。 …

盈利47亿,快手的危机感却没消失

文丨郭梦仪 又是一年互联网大厂的半年报成绩单放榜时&#xff0c;一批主打下沉市场的公司也在从追求高增长&#xff0c;转向了高利润。 8月20日盘后&#xff0c;快手发布了“营利双增”的业绩报告&#xff0c;但显然营收增长远远低于利润的增长。 伴随着与抖音停战&#xff…

选择排序【详解】

本期介绍&#x1f356; 主要介绍&#xff1a;排序中的选择排序。 文章目录 1. 前言2. 选择排序3. 优化选择排序 1. 前言 相信只要接触过C语言的同学都或多或少了解排序问题&#xff0c;其中最基本&#xff0c;且最为人所熟知的排序是&#xff1a;选择排序。下面我会带着大家重新…

深入解读LLaMA-Factory

转自&#xff1a;老朱读AI 1、介绍 LLaMA-Factory是一个开源平台&#xff0c;旨在为研究人员和开发者提供便捷的大型语言模型微调环境。通过LLaMA-Factory&#xff0c;用户可以轻松地加载预训练模型&#xff0c;调整模型参数&#xff0c;并在特定数据集上进行训练&#xff0c…

【Python机器学习】NLP分词——利用分词器构建词汇表(六)——词汇表归一化

目录 大小写转换 词干还原 词形归并 使用场景 词汇表大小对NLP流水线的性能有很大的影响&#xff0c;有一种减少词汇表大小的方法是将词汇表归一化以便意义相似的词条归并成单个归一化的形式。这样做一方面可以减少需要再词汇表中保留的词条数&#xff0c;另一方面也会提高…