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

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.xdnf.cn/news/16554.html

相关文章:

  • 信息技术发展与区块链的崛起:深度解析与未来展望
  • 基于web的在线购物系统的设计与实现/在线商城的设计与实现
  • 【微信小程序】12、生物认证能力
  • 从字符串中“薅出”最长子串:LeetCode 340 Swift 解法全解析
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——7. AI赋能(上):训练你自己的YOLOv8瑕疵检测模型
  • RTSP协议详解与C++实现实例
  • 津发科技带你了解皮肤电信号中的SCL与SCR
  • 深度解读|美创科技参编国家标准《数字水印技术实现指南》
  • windows 获取 APK 文件的包名和启动 Activity 名称
  • Kafka——Kafka控制器
  • 深入浅出设计模式——创建型模式之建造者模式 Builder
  • pnpm 入门与实践指南
  • ZKmall开源商城架构工具链:Docker、k8s 部署与管理技巧
  • [leetcode] 实现 Trie (前缀树)
  • 暑期算法训练.10
  • 【智能协同云图库】智能协同云图库第八弹:基于阿里云百炼大模型—实现 AI 扩图功能
  • 1 RAG三问
  • 云端文档管理新纪元:Paperless-ngx与cpolar打造的无边界文件生态
  • GO 开发环境安装及配置
  • 【21】C# 窗体应用WinForm ——图片框PictureBox属性、方法、实例应用
  • 【C++算法】80.BFS解决FloodFill算法_岛屿数量
  • 符号计算与算法实践|使用Maple教授​​群论​​和​​图论​​课程
  • 20250729使用WPS打开xlsx格式的电子表格时候隐藏显示fx的编辑栏的方法
  • 【数据可视化-74】电信用户流失数据可视化分析:Python + Pyecharts 炫酷大屏(含完整的数据,代码)
  • 如何在Linux系统下进行C语言程序的编写和debug测试
  • 建筑兔零基础python自学记录114|正则表达式(1)-18
  • 15-C语言:第15~16天笔记
  • JSON解析
  • 力扣刷题(第一百零二天)
  • BitMart 启动中文品牌“币市”:引领加密资产本地化发展新篇章