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

DeepSeek LeetCode 1439. 有序矩阵中的第 k 个最小数组和 public int kthSmallest(int[][] mat, int k)

这道题是1434的下一题,要求:从矩阵的每一行选一个数,得到数组和,找出第 k 小的和。

核心思路

多路归并 + 最小堆

  • 第一行每个数作为初始和
  • 依次合并下一行:当前所有和 + 新行的每个元素
  • 用最小堆维护前 k 小的和

代码实现 AC

classSolution{publicintkthSmallest(int[][]mat,intk){intm=mat.length;// 行数intn=mat[0].length;// 列数// 第一行的所有数作为初始候选和PriorityQueue<Integer>pq=newPriorityQueue<>();for(intnum:mat[0]){pq.offer(num);}// 依次合并后续每一行for(introw=1;row<m;row++){PriorityQueue<Integer>nextPq=newPriorityQueue<>();// 当前所有候选和 + 新行的每个元素while(!pq.isEmpty()){intcurrSum=pq.poll();for(intnum:mat[row]){nextPq.offer(currSum+num);}}// 只保留前 k 个最小的for(inti=0;i<k&&!nextPq.isEmpty();i++){pq.offer(nextPq.poll());}}// 第 k 个最小的在堆顶(因为最后只剩 k 个)intresult=0;for(inti=0;i<k;i++){result=pq.poll();}returnresult;}}

复杂度分析

  • 时间复杂度:O(m × n × k × log k)
  • 空间复杂度:O(k)

更优解法:二分答案

由于 k 可能很大(最多 200),上述方法在 k 接近 n^m 时会超时,可以用二分 + 计数优化:

classSolution{publicintkthSmallest(int[][]mat,intk){intm=mat.length;intleft=0,right=0;// 最小和:每行第一个数之和for(inti=0;i<m;i++){left+=mat[i][0];right+=mat[i][n-1];}intbase=left;// 基准和(最小和)// 二分查找第 k 小的数组和while(left<right){intmid=left+(right-left)/2;// 统计有多少种数组和 <= midintcount=countArraysSumLessThan(mat,0,mid,base,k);if(count>=k){right=mid;}else{left=mid+1;}}returnleft;}privateintcountArraysSumLessThan(int[][]mat,introw,inttarget,intsum,intk){if(row==mat.length)return1;if(sum>target)return0;intcount=0;for(intval:mat[row]){count+=countArraysSumLessThan(mat,row+1,target,sum+val,k);if(count>k)break;// 剪枝}returncount;}}

两种方法对比

方法优点缺点
多路归并简单直观,容易实现k 大时可能超时
二分+计数效率更高,适合大数据实现稍复杂

关键点

  1. 初始堆用第一行所有数
  2. 每合并一行只保留前 k 个最小和
  3. 最后堆顶就是第 k 个(如果用堆弹出 k 次)
http://www.jsqmd.com/news/648149/

相关文章:

  • Python 装饰器高级应用指南
  • 手把手教你用DigNet从scRNA-seq数据构建基因调控网络(附乳腺癌案例解析)
  • PyTorch 2.8镜像高清案例:Stable Video Diffusion生成电影级运镜视频截图
  • 玻璃幕墙的自爆原因,以及安全隐患分析
  • GeographicLib 地理计算库终极指南:从WMM2025地磁模型到高精度坐标转换实战
  • c++ string字符串详解
  • 渗透测试中的优先级选择:以Misdirection靶机为例解析如何避免死磕
  • IndexTTS-2-LLM与Tacotron2对比:新一代TTS优势分析
  • DeepSeek linux-6.19/net/ipv6/addrconf.c 源码分析
  • 2025_NIPS_MASTER: Enhancing Large Language Model via Multi-Agent Simulated Teaching
  • 从Word2Vec到BERT:前馈网络(FFNN)在NLP预训练模型里扮演了什么角色?
  • 深入理解Millennium的FFI机制:TypeScript与Lua的完美交互
  • 未来5年最“钱“景岗位揭晓:AI产品经理,普通人如何从0到1逆袭?(内含3步进阶法+学习资源)
  • 2025_NIPS_HyperMARL: Adaptive Hypernetworks for Multi-Agent RL
  • Windows 10/11网络配置全攻略:手把手教你修改IPv4地址(含子网掩码自动计算)
  • 「游戏史话第1期」莉莉丝的远征:从“差评”打工人,到狂揽百亿的出海领军者
  • translategemma-4b-it多场景:单图翻译、批量图处理、API服务、桌面应用
  • C++递归算法使用;C++指针的使用;
  • AutoLisp实战:从零到一构建你的第一个绘图工具
  • 2026年质量好的宠物用品铁罐推荐品牌厂家 - 行业平台推荐
  • TG个人发卡机器人系统源码 支持双语言 二次开发版本
  • GPT-6爆表!200万Token+原生多模态,AI编码能力直接起飞!
  • 石榴解 × KnowFlow:一套面向 C 端用户的健康科普 AI 知识库解决方案,如何跑通落地
  • 豆包 Rocky Linux 10.1 环境下 100 道 grep 命令高频面试题 + 详细答案
  • BFF 架构决策与落地实践:从第一性原理到工程取舍
  • **发散创新:基于Go语言的轻量级Web容器实战与性能优化**在现代微服务架构中,**Web容器**不仅是应用运
  • 从翻译到定制:手把手教你用Buildroot 2025.05手册玩转嵌入式Linux BSP开发
  • Lychee开源大模型部署案例:哈工大深圳NLP团队出品的图文检索精排方案
  • 终极指南:如何在资源受限嵌入式系统中高效实现Modbus通信
  • 006、规划模块(三):分层任务网络与自动化规划器