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

E.位运算-与或:2871题+2401题

题目链接:2871. 将数组分割成最多数目的子数组(中等)

算法原理:

解法:贪心+位运算

4ms击败37.50%

时间复杂度O(N)

①与运算性质:与运算的数越多,最终结果越小

②那么基于①,子数组的AND≥整个数组的AND

③记整个数组的AND为a,根据②,如果分割出超过一个数组,那么得分至少为2a,此时2a>a,因此我们会选择不分割,答案为1

④因此得出结论:如果a>0,那么只能分割出1个数组(nums数组本身)

⑤如果a=0,那么我们就可以分割出尽量多的AND=0的子数组,咋分??

⑥从左往右遍历,只要发现AND=0,就立即分割,因为不立即分割的话,当前多AND了一个数,后面就会少AND一个数,后面AND的概率就小了(其实是贪心的思想)

⑦需要注意的是:如果最后一段子数组的AND>0,这一段可以直接合并到前一个AND=0的子数组中

JAVA代码:

class Solution { //2871. 将数组分割成最多数目的子数组 public int maxSubarrays(int[] nums) { int ret=0; //-1的二进制:11……1,和任何数与运算都等于那个数 int a=-1; for(int x:nums){ a&=x; if(a==0){ ret++;//分割 a=-1; } } //如果ret=0,说明所有数的 AND>0,答案为1 return Math.max(ret,1); } }

题目链接:2401. 最长优雅子数组(中等)

算法原理:

解法一:暴力枚举

3ms击败72.66%

时间复杂度O(n logn)

子数组中任意两个数按位与均为0,意味着子数组所有数的第 i 个比特位,最多只能有一个1,其余均为0,否则必然有两个数的按位与>0

根据鸽巢原理(抽屉原理),本题数据范围下,优雅子数组的长度不会超过30,否则一个int装不下

既然长度不会超过30,那么直接暴力枚举子数组右端点 i 即可,定义 j 往前遍历,只要按位与=0,就更新最大长度

解法二:滑动窗口

3ms击败72.66%

时间复杂度O(N)

滑动窗口专题:一轮复习——C.滑动窗口模型总结

通过前面的分析我们知道:所有数的二进制位是“互不相交”的,没有任何一个位置上有超过1个1

因此我们可以利用或运算维护当前窗口中所有元素的位并集,用类似“状态压缩”的方式,快速判断每个二进制位上是否已经有1

出窗口:只要当前元素nums[right]与or有占位冲突,持续将nums[left]出窗口,直至nums[right]与or没有占位冲突

进窗口:nums[right]与or没有占位冲突后,将nums[right]放进窗口里,对应占位

更新:此时窗口内是符合优雅子数组的定义的,各个二进制位与运算后结果为0,更新最长长度

JAVA代码:

class Solution { //2401. 最长优雅子数组 //解法一:暴力枚举 public int longestNiceSubarray(int[] nums) { int ret=0; for(int i=0;i<nums.length;i++){//枚举子数组右端点i int or=0; int j=i; //nums[i]与子数组中的任意元素AND均为0 while(j>=0&&(or&nums[j])==0) or|=nums[j--];//加到子数组中 ret=Math.max(ret,i-j); } return ret; } }
class Solution { //2401. 最长优雅子数组 //解法二:滑动窗口 public int longestNiceSubarray(int[] nums) { int ret=0; int or=0; int left=0; for(int right=0;right<nums.length;right++){ //出窗口 while((or&nums[right])>0) or^=nums[left++]; //进窗口 or|=nums[right]; //更新 ret=Math.max(ret,right-left+1); } return ret; } }
http://www.jsqmd.com/news/908920/

相关文章:

  • MoE模型压缩的未来:REAP方法为何成为专家剪枝的黄金标准 [特殊字符]
  • 武汉千鸿黄金回收|黄金回收避坑 5 大要点(不压价 + 不扣损耗 + 当场结算) - 润富黄金珠宝行
  • 2026德州市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一修哥咨询
  • 图尔塞GPU可变速率着色技术解析与优化
  • 保姆级教程:在openSUSE上搞定爱普生L3255打印机驱动,解决libcupsimage.so.2缺失报错
  • 从手动点击到自动学习:智慧树刷课插件如何为你节省90%的操作时间
  • 手把手复现WSO2 CVE-2022-29464:从Burp抓包到一键GetShell的完整流程
  • 华为云挂载其它硬盘
  • TMSpeech:Windows离线语音识别的隐私优先解决方案
  • 5.28上海黄金回收实测|3 家头部门店 PK,价格 / 合规 / 隐私全拆解 - 速递信息
  • 【Sora 2神经辐射场生成内参手册】:仅限首批AI生成实验室流出的8个未公开超参数组合与渲染失真规避清单
  • 3步搞定智能视频剪辑:用FunClip让AI帮你自动剪片 [特殊字符]
  • DeepSeek企业版部署实战:从零到高可用集群的7步落地手册(含性能压测数据)
  • PDF 翻译排版大师新手实操指南
  • QQ空间历史说说完整导出终极指南:一键找回你的数字青春
  • 兰州黄金上门回收实测:福运来报价最实在 - 上门黄金回收
  • 从ABC数据集到你的项目:手把手训练一个自己的ParSeNet模型(环境配置+避坑指南)
  • 2026年吹塑盒厂家/吹塑盒工具箱/电动工具吹塑盒推荐榜单:材质工艺与耐用性深度解析 - 企业推荐官【官方】
  • 低成本方便快捷发布个人网站!适合学生和老师
  • 别再为Aspose Cells水印发愁了!Java 21.1版本手动破解实战(附完整Javassist代码)
  • 2026年 退役风电叶片/建筑垃圾/光伏组件回收处置装备厂家推荐榜单:低碳资源化处置技术核心优选 - 企业推荐官【官方】
  • 2026年贵阳中高端室内全案设计深度横评:从毛坯到精装的一站式解决方案 - 年度推荐企业名录
  • 2026 浙江金华钢结构厂房防水防腐防火隔热公司推荐(OP3 必看・盆地湿热高温定制版) - 本地便民网
  • XHS-Downloader:小红书无水印下载器的终极指南,3分钟上手批量采集工具
  • 2026实地调研,解锁天津黄金回收靠谱合作门店 - 奢侈品回收测评
  • AI Agent架构设计:工作流编排与权限控制的工程实践
  • 终极文件分析工具Detect It Easy:从恶意软件检测到逆向工程的完整解决方案
  • 广州红海物流科技:深耕空运报关领域的专业服务提供商 - 奔跑123
  • 【全面解析】框架总览
  • 2026年最新的 山东系统门窗、铝门窗品牌排行:5大主流品牌实测对比 - 奔跑123