当前位置: 首页 > news >正文

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

题目:

题解:

#define MIN(a, b) ((a) > (b) ? (b) : (a))int** kSmallestPairs(int* nums1, int nums1Size, int* nums2, int nums2Size, int k, int* returnSize, int** returnColumnSizes) {if (nums1Size == 0 || nums2Size == 0 || k <= 0) {*returnSize = 0;return NULL;}/*二分查找第 k 小的数对和的大小*/int left = nums1[0] + nums2[0];int right = nums1[nums1Size - 1] + nums2[nums2Size - 1];int pairSum = right;while (left <= right) {int mid = left + ((right - left) >> 1);long long cnt = 0;int start = 0;int end = nums2Size - 1;while (start < nums1Size && end >= 0) {if (nums1[start] + nums2[end] > mid) {end--;} else {cnt += end + 1;start++;}}if (cnt < k) {left = mid + 1;} else {pairSum = mid;right = mid - 1;}}int ** ans = (int **)malloc(sizeof(int *) * k);*returnColumnSizes = (int *)malloc(sizeof(int) * k);int currSize = 0;int pos = nums2Size - 1;/*找到小于目标值 pairSum 的数对*/for (int i = 0; i < nums1Size; i++) {while (pos >= 0 && nums1[i] + nums2[pos] >= pairSum) {pos--;}for (int j = 0; j <= pos && k > 0; j++, k--) {ans[currSize] = (int *)malloc(sizeof(int) * 2);ans[currSize][0] = nums1[i];ans[currSize][1] = nums2[j];(*returnColumnSizes)[currSize] = 2;currSize++;}}/*找到等于目标值 pairSum 的数对*/pos = nums2Size - 1;for (int i = 0; i < nums1Size && k > 0; i++) {int start1 = i;while (i < nums1Size - 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(k, (long) (i - start1 + 1) * (start2 - pos + 1));for (int j = 0; j < count && k > 0; j++, k--) {ans[currSize] = (int *)malloc(sizeof(int) * 2);ans[currSize][0] = nums1[i];ans[currSize][1] = nums2[pos];(*returnColumnSizes)[currSize] = 2;currSize++;}}*returnSize = currSize;return ans;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 学懂C++(四十五 ):深入详解C++ STL 容器:从基础到进阶
  • 深度学习——分布式训练
  • Webpack中的 HTTP 压缩
  • c语言个人笔记
  • netty编程之实现HTTP服务
  • 采用java或者python获取视频流的方法
  • 【功能实现】axios实现动态数据
  • 【卡码网C++基础课 13.链表的基础操作1】
  • 婚恋交友系统该如何制作成品系统?
  • Spring Boot 全局异常@ControllerAdvice和@RestControllerAdvice的区别
  • C#入门(15)while循环和do—while循环
  • SpringMVC核心机制环境搭建
  • 协议汇总 TCP、UDP、Http、Socket、Web Scoket、Web Service、WCF、API
  • ruoyi-app前端在缓存中添加nick_name和user_id属性值
  • GeoStudio2024:地质工程的瑰宝下载安装介绍
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 07.Android之多媒体问题
  • 4个实用的微服务测试策略
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • C++入门教程(10):for 语句
  • js如何打印object对象
  • PhantomJS 安装
  • php中curl和soap方式请求服务超时问题
  • Vue 2.3、2.4 知识点小结
  • Vue 重置组件到初始状态
  • vue脚手架vue-cli
  • Yeoman_Bower_Grunt
  • 初识 webpack
  • 服务器从安装到部署全过程(二)
  • 马上搞懂 GeoJSON
  • 前端
  • 06-01 点餐小程序前台界面搭建
  • Spring Batch JSON 支持
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 容器镜像
  • ​queue --- 一个同步的队列类​
  • # Maven错误Error executing Maven
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #### golang中【堆】的使用及底层 ####
  • #Java第九次作业--输入输出流和文件操作
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (16)Reactor的测试——响应式Spring的道法术器
  • (20)docke容器
  • (3)llvm ir转换过程
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (二)fiber的基本认识
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (黑马C++)L06 重载与继承
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (算法二)滑动窗口
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (一)80c52学习之旅-起始篇
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default