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

2411.按位或最大的最小子数组长度

2025.07.29

2411.按位或最大的最小子数组长度

给你一个长度为 n 下标从 0 开始的数组 nums ,数组中所有数字均为非负整数。对于 0n - 1 之间的每一个下标 i ,你需要找出 nums 中一个 最小 非空子数组,它的起始位置为 i (包含这个位置),同时有 最大按位或运算值

  • 换言之,令 Bij 表示子数组 nums[i...j] 的按位或运算的结果,你需要找到一个起始位置为 i 的最小子数组,这个子数组的按位或运算的结果等于 max(Bik) ,其中 i <= k <= n - 1

一个数组的按位或运算值是这个数组里所有数字按位或运算的结果。

请你返回一个大小为 n 的整数数组 answer,其中 answer[i]是开始位置为 i ,按位或运算结果最大,且 最短 子数组的长度。

子数组 是数组里一段连续非空元素组成的序列。

暴力大超时

class Solution {
public:vector<int> smallestSubarrays(vector<int>& nums) {int n = nums.size();vector<int> ans(n);for (int i = 0; i < n; i++) {int max = 0;       // 记录从 i 开始的最大按位或结果int min_len = INT_MAX; // 记录最大按位或对应的最短长度int current = 0;   // 当前的按位或结果for (int j = i; j < n; j++) {current |= nums[j];  if (current > max) {max = current;min_len = j - i + 1; }else if (current == max) {min_len = min(min_len, j - i + 1);}} ans[i] = min_len;}return ans;}
};

新学的

将二进制数看做集合,按位或运算看成两个集合的并集。

在这里插入图片描述

这里

  • nums[j] | a == nums[j],说明 a 的所有二进制位中为 1 的位置,nums[j] 中已经都是 1(a 没有给 nums[j] 新增任何 1 位)。
  • 反之,若 nums[j] | a != nums[j],说明 a 包含 nums[j] 没有的 1 位,按位或后 nums[j] 会 “增强”(二进制 1 位增多)。
  • nums[j] | a == nums[j]时,说明当前元素无法被增强,则左侧所有元素都必然无法被增强,所以结束循环
class Solution {
public:vector<int> smallestSubarrays(vector<int>& nums) {int n = nums.size();vector<int> ans(n);for (int i = 0; i < nums.size(); i++) {int a = nums[i];ans[i] = 1;for (int j = i - 1; j >= 0 && (nums[j] | a) != nums[j]; j--) {nums[j] = nums[j] | a;ans[j] = i - j + 1;}}return ans;}
};
http://www.dtcms.com/a/303848.html

相关文章:

  • 服务器中涉及节流(Throttle)的硬件组件及其应用注意事项
  • 服务器分布式的作用都有什么?
  • 《Java 程序设计》第 9 章 - 内部类、枚举和注解
  • ClickHouse MergeTree引擎:从核心架构到三级索引实战
  • C++实现黑板模式操作
  • 怎么提升服务器的防攻击能力!
  • 异地协同新玩法!Docker+Neko+cpolar打造云端共享浏览器
  • Sea AI Lab万信逸博士:大模型训练流水线并行四部曲:吞吐、内存、负载均衡与线性扩展
  • 专业Python爬虫实战教程:逆向加密接口与验证码突破完整案例
  • C 语言指针深度解析:从数组指针到指针函数的实战指南
  • 【21】C# 窗体应用WinForm ——图片框PictureBox属性、方法、实例应用
  • 重生之我在暑假学习微服务第四天《Docker-下篇》
  • Intellij Idea--解决Cannot download “https://start.spring.io‘: Connect timedout
  • React面试题目和答案大全
  • 队列算法之【用队列实现栈】
  • 系统重启过程和启动目标
  • Note3: CNN(卷积神经网络)
  • java每日精进 7.29【框架数据权限详解】
  • 远程Qt Creator中文输入解决方案
  • day064-kodbox接入对象存储与配置负载均衡
  • linux命令tail的实际应用
  • 网络数据传输与NAT技术的工作原理
  • 社区老人健康信息管理系统|基于springboot社区老人健康信息管理系统设计与实现(源码+数据库+文档)
  • SSO CAS+Shiro+springmvc单点登录解决方案
  • 符号计算与算法实践|使用Maple教授​​群论​​和​​图论​​课程
  • 【 MySQL集群架构与实践1】使用Docker实现简单主从复制
  • uni-app x开发避坑指南:拯救被卡顿的UI线程!
  • 【CF】Day114——杂题 (贪心 + 图论 | LCM + 贪心 | 最大最小子序列 + 图论)
  • 图论:Bellman_ford算法
  • docker设置iptables=false后容器内部无法互相访问