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

千问 LeetCode 2732. 找到矩阵中的好子集 Go实现

这道题的核心在于利用位运算和数学规律贪心来降低时间复杂度。 核心思路题目要求找到一个非空的行子集使得子集中每一列的元素和不超过子集大小的一半。直接暴力枚举所有子集2^m 种情况会超时但这道题有一个极其关键的数学性质如果存在一个大小 k ge 3 的好子集那么一定存在一个大小为 1 或 2 的好子集。因此我们只需要寻找以下两种情况即可1. 大小为 1 的好子集即矩阵中是否存在某一行它的所有元素都是 0。此时列和为 0满足 le lfloor 1/2 rfloor 0。2. 大小为 2 的好子集即是否存在两行它们在任意同一列上不同时为 1。如果两行在某列上同时为 1该列和为 2不满足 le lfloor 2/2 rfloor 1。这意味着两行的二进制表示下按位与的结果必须为 0。 Go 实现代码由于矩阵的列数 n 最多只有 5我们可以利用状态压缩将每一行压缩成一个整数用 5 位二进制即可表示。func goodSubsetofBinaryMatrix(grid [][]int) []int {m : len(grid)// 使用 map 记录每种行状态压缩后的整数对应的行下标// 如果有多行状态相同只保留任意一个下标即可因为只需要返回一个解maskToIdx : make(map[int]int)for i : 0; i m; i {mask : 0// 状态压缩将一行转换成一个整数for j : 0; j len(grid[i]); j {if grid[i][j] 1 {mask | (1 j)}}// 情况1找到了全为 0 的行mask 为 0if mask 0 {return []int{i}}// 将当前行的状态存入 mapmaskToIdx[mask] i}// 情况2寻找两行它们的按位与结果为 0// 这意味着这两行在任何一列上都没有同时出现 1for mask1, i : range maskToIdx {for mask2, j : range maskToIdx {if (mask1 mask2) 0 {// 题目要求返回升序的行下标if i j {return []int{i, j}}return []int{j, i}}}}// 如果找不到大小为 1 或 2 的好子集根据数学规律更大的子集也不存在return []int{}} 复杂度分析* 时间复杂度O(m cdot n U^2)。遍历矩阵进行状态压缩需要 O(m cdot n)。由于列数 n le 5不同的行状态最多只有 2^5 32 种即 U 32。双重循环遍历这些状态的时间是 O(32^2)这是一个极小的常数整体效率非常高。* 空间复杂度O(U)即 O(32)主要用于 maskToIdx 哈希表来存储不同行状态的下标映射。
http://www.rkmt.cn/news/1399958.html

相关文章:

  • 【YOLO目标检测全栈实战】82 边缘部署中的模型量化:从FP32到INT8,精度与速度的终极博弈
  • 【YOLO目标检测全栈实战】80 YOLO推理加速:动态批处理与自适应负载均衡
  • 边缘计算中的轻量级神经网络架构LAERC解析
  • 飞算 Java AI 智能编程
  • AI辅助固件开发:R-P-E-T四步法提升嵌入式开发效率
  • DataWeave实战:动态构建LLM提示词的两大陷阱与解决方案
  • 曲率感知优化框架:破解PINN训练瓶颈的轻量级方案
  • 避坑指南:Unity ShaderGraph中Input节点在URP和HDRP下的兼容性问题详解
  • 从‘刷车没颜色’说起:深入理解UE4材质Usage属性,避免打包后的材质‘罢工’
  • 手工测试工程师如何转型为质量赋能者:技能升级与思维转变
  • F411-WeAct(二)SPI Flash存储实战:W25Q64驱动优化与文件系统初探
  • 环形定向耦合器设计避坑指南:HFSS仿真中那些容易出错的边界条件与端口设置
  • 贝叶斯联合建模:小区域估计中连续与二元数据的协同推断
  • 手机热点办公必看:一招解决Win10后台svchost疯狂偷跑流量的烦恼
  • 别再只用LineRenderer画线了!用Unity 2D物理系统做个会‘掉下来’的画笔,5分钟搞定创意原型
  • 研发管理软件推荐清单:如何搭建一套高效的DevOps研发效能平台?
  • Node.js API安全审计实战:从漏洞扫描到RBAC加固的完整指南
  • 别再让无人机‘断电炸机’了!保姆级教程:用BB响设置3.6V安全报警阈值
  • 源启重大,智创未来 | AtomGit「源启高校」计划重庆大学站圆满落幕!
  • 传统喷绘还在跟“色差”较劲,会被替代吗
  • 保姆级教程:在AMD Ryzen电脑上用VMware 16.2.5搞定macOS Monterey (12.x) 虚拟机
  • 领域特定AI聊天机器人架构设计:从通用模型到专属专家的构建指南
  • 用Python和Keras从零搭建CNN:一个医学影像识别课程设计的踩坑与调优实录
  • 智能体安全授权新范式:便携式作用域令牌设计与实现
  • 构建语音控制AI智能体:从LLM意图解析到安全文件操作的实战指南
  • 【从零开始学习Go语言 | 第六篇】Go语言基础之流程控制
  • NSSM实战:除了基础注册,这些高级配置让你的Windows服务更稳定(日志、重启、权限篇)
  • 想选低温省煤器等锅炉部件工厂?这些要点你不能错过!
  • LeetCode 比较版本号:从 split 解法到双指针优化,彻底讲懂这道题
  • XShell免费版的安装配置教程(附安装包)