当前位置: 首页 > 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.lryc.cn/news/603878.html

相关文章:

  • gTest测试框架的安装与配置
  • 三、Linux用户与权限管理详解
  • 【目标检测】小样本度量学习
  • 量子计算革命:重新定义计算的边界与未来
  • DNS污染与劫持
  • Python爬虫02_Requests实战网页采集器
  • MoR vs MoE架构对比:更少参数、更快推理的大模型新选择
  • Ubuntu20.04子系统
  • Oracle发布MCP Server,自然语言交互说“人话”
  • AUTOSAR Mcal Gpt - 模块介绍
  • LeetCode|Day29|1009. 十进制整数的反码|Python刷题笔记
  • Jenkins 详解
  • Java 大视界 -- Java 大数据机器学习模型在金融信用评级模型优化与信用风险动态管理中的应用(371)
  • 当贝纯净版_海信ip811n海思mv320处理器安卓4.42及9.0主板优盘免拆刷机固件及教程
  • 符号计算与算法实践|使用Maple教授​​群论​​和​​图论​​课程
  • JSON解析(day20)
  • 【CF】Day114——杂题 (贪心 + 图论 | LCM + 贪心 | 最大最小子序列 + 图论)
  • 如何创建一个 Solana 钱包?
  • imx6ull-驱动开发篇3——字符设备驱动开发实验
  • C 语言第 12 天学习笔记:函数进阶应用与变量特性解析
  • 每日学习笔记记录(分享更新版-凌乱)
  • imx6ull-驱动开发篇2——字符设备驱动开发步骤
  • 网络通信基础(一)
  • Redis 跨主机连接超时分析:从网络波动到架构优化
  • 使用鼠标在Canvas上绘制矩形
  • 【C++算法】80.BFS解决FloodFill算法_岛屿数量
  • 《Java 程序设计》第 9 章 - 内部类、枚举和注解
  • 实在智能Agent智能体荣登全球“Go_Global_AI_100”百强榜,中国AI走向世界!
  • STM32——HAL库
  • 什么是EasyVR shield 3?如何设置EasyVR shield 3