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

2024.1.4力扣每日一题——被列覆盖的最多行数

2024.1.4

      • 题目来源
      • 我的题解
        • 方法一 回溯+位运算优化

题目来源

力扣每日一题;题序:2397

我的题解

方法一 回溯+位运算优化

这道题一看就会想到使用回溯法,但是采用回溯法后如何判断有多少行被覆盖,直接计算矩阵时间复杂度较高,因此可以将0-1矩阵的每一行抽象为一个整数R,以及将选中列形成的整数L,然后根据位运算计算 R^L 是否等于R本身,若等于本身则表示该行被覆盖,然后在回溯过程中更新最终结果

时间复杂度:O(m× 2 n 2^n 2n)
空间复杂度:O(m)。矩阵的行转换为整数需要的空间

int ans = 0;public int maximumRows(int[][] matrix, int numSelect) {int m = matrix.length, n = matrix[0].length;if (n <= numSelect) return m;int[] nums = new int[m];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == 1) nums[i] |= 1 << j;}}backTrace(n - 1, m, nums, numSelect);return ans;
}public void backTrace(int n, int m, int[] nums, int numSelect) {// 当给定的列数选完或者矩阵的列遍历完,更新结果if (n < 0 || numSelect == 0) {int c = 0;//计算覆盖的行数for (int num : nums) if (num == 0) c++;ans = Math.max(ans, c);return;}//不选择第n列 并缩小列的范围backTrace(n - 1, m, nums, numSelect);// modify表示选中的列的二进制数对应的整数int modify = 0, index = 0;//把对应列上的1去除for (int i = 0; i < m; i++) {if (((nums[i] >> n) & 1) == 1) {nums[i] ^= 1 << n;modify |= 1 << i;}} //选择第n列 并缩小列的范围backTrace(n - 1, m, nums, numSelect - 1);// 回退while (modify > 0 && index < m) {if ((modify & 1) == 1) {nums[index] |= 1 << n;}modify = modify >> 1;index++;}
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

http://www.lryc.cn/news/275758.html

相关文章:

  • Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (一)
  • 第五讲_css元素显示模式
  • Shell脚本入门实战:探索自动化任务与实用场景
  • 【AI视野·今日Sound 声学论文速览 第四十二期】Fri, 5 Jan 2024
  • Java中如何使用SQLite数据库
  • kettle的基本介绍和使用
  • 数据结构第2章 栈和队列
  • Axure鲜花商城网站原型图,网上花店订花O2O本地生活电商平台
  • 【docker】centos 使用 Nexus Repository 搭建私有仓库
  • RabbitMQ(八)消息的序列化
  • 23款奔驰GLC260L升级原厂540全景影像 安装效果分享
  • 【CSS】文字描边的三种实现方式
  • 【事务】事务传播级别
  • Android WiFi 连接
  • PLC与上位机PN通讯时,如何防止连接失败?
  • LDD学习笔记 -- Linux错误码
  • 华为交换机入门(六):VLAN的配置
  • 登录验证
  • 利用Podman构建基于Fission env/builder的镜像
  • php加减乘除函数
  • Go语言学习记录——用正则表达式(regexp包)来校验参数
  • 公司办公电脑文件防泄密系统
  • 手把手带你死磕ORBSLAM3源代码(三十四)Tracking.cc MonocularInitialization编辑
  • STL标准库与泛型编程(侯捷)笔记3
  • Iceberg: 列式读取Parquet数据
  • Ansible、Saltstack、Puppet自动化运维工具介绍
  • python线程池提交任务
  • 跨境电商企业客户服务优化指南:关键步骤与实用建议
  • Visual Studio Code 常用快捷键
  • ubuntu创建pytorch-gpu的docker环境