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

E.位运算-异或:2588. 统计美丽子数组数目

题目链接:2588. 统计美丽子数组数目(中等)

算法原理:

解法:位运算-前缀异或

题述操作中,将数减去2的k次幂,用二进制来表示的话,3-2的0次幂等同于:

0011-0001=0010,如果再-2呢,就是0010-0010=0000,可以看到,每次操作都能够让这个数的某个二进制位上的1变成0

对于两个数,就是让两个数的第k位同时变成0,那么要满足让子数组全变成0,就必须满足子数组中所有数的每一位上1的个数都是偶数

换而言之,“美丽子数组”就是这个子数组中所有数异或在一起,结果为0

为了方便取出每一个区间的异或值,我们可以借助“异或消消乐”的原理,构造出一个前缀异或数组,xor[i]表示前 i 个数的异或结果

为了避免空数组,枚举的时候 i 从0开始,j 就要从 i+1 开始,而不是从 i 开始了

但是这个双重的for循环的时间复杂度是O(N²),在此题会引起超时,因此我们需要做出优化

优化

55ms击败39.72%

时间复杂度O(N)

用哈希表记录每个前缀异或值出现的次数,遍历数组时,记当前前缀异或值为cur,那么我们只需知道前面出现过多少次cur,就说明有多少个以当前元素结尾的子数组异或值为0,累加次数即可

上述代码实现过程类似:优选算法-前缀和:29.和为K的子数组

Java代码:

class Solution { //一开始的暴力枚举,时间复杂度O(N),会超时 //2588. 统计美丽子数组数目 public long beautifulSubarrays(int[] nums) { int n=nums.length; //记录前缀异或 //xor[i]:前i个数的异或结果 int[] xor=new int[n+1]; for(int i=1;i<=n;i++) xor[i]=xor[i-1]^nums[i-1]; //枚举所有子数组 long cnt=0; for(int i=0;i<=n;i++) for(int j=i+1;j<=n;j++) if((xor[i]^xor[j])==0) cnt++; return cnt; } }
class Solution { //优化版 //2588. 统计美丽子数组数目 public long beautifulSubarrays(int[] nums) { int n=nums.length; long cnt=0; //统计异或值出现次数 Map<Integer,Integer> hash=new HashMap<>(); hash.put(0,1); //xor[i]:前i个数的异或结果 int[] xor=new int[n+1]; for(int i=1;i<=n;i++){ xor[i]=xor[i-1]^nums[i-1]; if(hash.containsKey(xor[i])) cnt+=hash.get(xor[i]); hash.merge(xor[i],1,Integer::sum); } return cnt; } }
http://www.jsqmd.com/news/873376/

相关文章:

  • 一文讲透AI时代的神器-Cursor
  • 西恩士液冷清洁度分析设备、检测设备与颗粒萃取设备 - 工业设备研究社
  • C++深入讲解类与封装的概念与使用
  • 2026年腾讯云OpenClaw/Hermes Agent配置Token Plan部署保姆级教程
  • YAML配置文件智能编辑技术方案:Red Hat专业工具提升开发效率
  • 2026年腾讯云OpenClaw/Hermes Agent配置Token Plan部署操作全解
  • 用LabVIEW和USRP玩转高阶QAM:从16QAM到1024QAM的星座图调试实战
  • 别再被Elsevier投稿系统坑了!手把手教你搞定LaTeX文件上传与elsarticle.cls版本兼容问题
  • 尿布台ODM领域的几家代表性生产企业 - 品牌测评鉴赏家
  • Midjourney复古出图率暴跌47%?紧急修复:V6.2新增--style retro v2.1底层协议兼容补丁(含3个必启开关)
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan部署操作全解
  • 范式锁定与认知殖民:全球AI大停滞时代的中国突围与“贾子之路”重构
  • 3个关键技巧:如何用SleeperX实现macOS智能睡眠管理的高效控制
  • 告别空引用恐慌:一份给C#开发者的Visual Studio编译器警告‘消警’保姆级清单
  • 认知主权视域下AI范式危机与中国突围:基于“贾子之路”的文明重构路径研究
  • 分享今日日常
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan搭建流程全公开
  • 别再死记硬背了!用ChatGPT当你的ReactJS私人教练,5天搞定组件和状态
  • 别再只用L.polygon了!用Leaflet + GeoJSON处理复杂行政区遮罩(含飞地、嵌套洞)
  • 6招搞定创新文化|干货必看
  • SpringBoot项目里,如何让ShardingSphere 5.x和dynamic-datasource和平共处?一个配置类搞定混合数据源
  • 开发团队头脑风暴创意收集评级程序,批量收集创意,按照可行性自动分级筛选。
  • 如何快速部署现代化仓库管理系统:中小企业的完整解决方案
  • 终极HsMod炉石传说插件:快速提升游戏体验的完整指南
  • 通过Taotoken CLI工具一键为团队统一配置多款AI开发工具
  • 从‘最大熵’到‘瑞丽熵’:手把手推导RDP公式,理解差分隐私的理论进化
  • 【Claude ROI计算模型】:20年AI商业化专家首度公开3大核心公式与5个避坑指南
  • 如何快速免费提取碧蓝航线Live2D模型?终极完整教程
  • AI写作辅助平台的合规秘籍:如何界定“合理使用”与学术不端?
  • 设计职场人脉标签精细化管理程序,给人脉分类标注领域,精细对接工作合作需求,