【前缀异或和】力扣2588. 统计美丽子数组数目

news2024/9/25 19:25:27

给你一个下标从 0 开始的整数数组nums 。每次操作中,你可以:

选择两个满足 0 <= i, j < nums.length 的不同下标 i 和 j 。
选择一个非负整数 k ,满足 nums[i] 和 nums[j] 在二进制下的第 k 位(下标编号从 0 开始)是 1 。
将 nums[i] 和 nums[j] 都减去 2k 。
如果一个子数组内执行上述操作若干次后,该子数组可以变成一个全为 0 的数组,那么我们称它是一个 美丽 的子数组。

请你返回数组 nums 中 美丽子数组 的数目。

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

示例 1:
输入:nums = [4,3,1,2,4]
输出:2
解释:nums 中有 2 个美丽子数组:[4,3,1,2,4] 和 [4,3,1,2,4] 。

  • 按照下述步骤,我们可以将子数组 [3,1,2] 中所有元素变成 0 :
    • 选择 [3, 1, 2] 和 k = 1 。将 2 个数字都减去 21 ,子数组变成 [1, 1, 0] 。
    • 选择 [1, 1, 0] 和 k = 0 。将 2 个数字都减去 20 ,子数组变成 [0, 0, 0] 。
  • 按照下述步骤,我们可以将子数组 [4,3,1,2,4] 中所有元素变成 0 :
    • 选择 [4, 3, 1, 2, 4] 和 k = 2 。将 2 个数字都减去 22 ,子数组变成 [0, 3, 1, 2, 0] 。
    • 选择 [0, 3, 1, 2, 0] 和 k = 0 。将 2 个数字都减去 20 ,子数组变成 [0, 2, 0, 2, 0] 。
    • 选择 [0, 2, 0, 2, 0] 和 k = 1 。将 2 个数字都减去 21 ,子数组变成 [0, 0, 0, 0, 0] 。

示例 2:
输入:nums = [1,10,4]
输出:0
解释:nums 中没有任何美丽子数组。

在这里插入图片描述

class Solution {
public:
    long long beautifulSubarrays(vector<int>& nums) {
        long long ans = 0;
        int s = 0;
        unordered_map<int,int> group = {{0,1}};
        for(int x : nums){
            s ^= x;
            ans += group[s];
            group[s]++;
        }
        return ans;

    }
};

这道题考虑到有2的幂次方,应该想到使用位运算的方法来做。由于是对子段的每两个数减去2^k,所以说明将该子段的元素都转换为二进制以后,每次减去2 ^k说明在相同位置的比特位上都减去1,也就是说,经过数次这样的操作后,最后所有元素都为0后,就是美丽的子数组。这就要求这个子段里的二进制中,一共要有偶数个1,进而转换为这个子段的异或和为0,说明是美丽的子数组。

第二个点是前缀异或和这个知识,比如 (1 ^ 2 ^ 3 ^ 4) ^ (1 ^ 2) = 3^4, 这就说明要求 3 和 4这个子段的异或和,就可以用较长的异或和去 异或 一个较短的异或和。

初始化unordered_map<int,int> group = {{0,1}};,然后遍历数组nums,用s来记录前缀异或和,group来记录前缀异或和出现过的次数,ans用来记录美丽前缀异或的数量。等于说不断枚举s,来看s之前有多少个前缀异或和 和s一样的数目(也就是美丽子数组的数目)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.数据加载时 暂无数据会晃一下再显示数据 2.判断图片加载失败后渲染占位图

工作中问题小记 这种问题正常来说都没有记录的意义 但是我是强迫症 hhh 1.在正常数据渲染时 如果为空我们会渲染(暂无数据占位图)来提示用户 通常是用数据长度来判断 但是他在刷新的时候会先弹出 <暂无数据> 的提示再显示那个数据 解决方法: 搞个标识符 必须等他请求完接…

【电控笔记z14z16】增加霍尔元件分辨率

霍尔传感器用的不多?实际增量编码器更好 z14 假设60度内速度不变 z16(更简单的方法)BLDC

vue前端项目--路由vue-router

1. 路由介绍 我们可以总结一下从早期网站开发到现代单页应用(SPA)的发展过程及其关键概念&#xff1a; 早期的服务器端渲染 (SSR): 早期的网站开发中&#xff0c;服务器负责生成完整的 HTML 页面&#xff0c;并将其发送给客户端展示。 每个 URL 对应一个特定的控制器(Control…

学习笔记 韩顺平 零基础30天学会Java(2024.8.7)

P481 Math方法 利用random返回一个[2,7]之间的随机数&#xff1a; 因为random只能返回[0,1)之间的随机数&#xff0c;因此做一下处理&#xff1a;[(int)(a), (int) (aMath.random()*(b-a1))]&#xff0c;对于Math.random()*(b-a1)&#xff0c;其中b-a1&#xff0c;它乘上[0,1)相…

PFC+DAB原理介绍

三、PFCDAB原理介绍 1、PFC工作原理 三相交流电网的一个公认拓扑是三相全桥 PFC。此拓扑也称为 B6 或“三段桥”。如图显示此拓扑仅使用三相交流输入运行。如果需要单相工作模式。可以轻松地通过增加中性线实现 三相电源包含三个交流相位&#xff0c;通常用 L1、L2 和 L3 表…

linux使用ssh连接一直弹出密码框问题

1.查看ssh服务的状态 输入以下命令&#xff1a; sudo service sshd status 小编已经安装了。 如果出现 Loaded: error (Reason: No such file or directory) 提示的话&#xff0c;说名没有安装ssh服务&#xff0c;按照第二步&#xff1a;安装ssh服务。 如果出现 Active: in…

sql中表和表之间基础的关系以及,多种连接查询和select的字句

1&#xff0c;表与表之间的关系 一对一 网上购买商品 一个订单是不是只能有一个地址 一对多 一个老师 可以教多个学生 但是 一个学生一个科目只能对应一个老师 多对多 一个学生在学校可以选修多门课程 一门课程可以被多个学生选择 数据准备 CREATE table h_employ…

WeNet 2.0:更高效的端到端语音识别工具包

WeNet 2.0:更高效的端到端语音识别工具包 原文链接&#xff1a;[2203.15455] WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit (arxiv.org) 1.摘要 WeNet是一个开源的端到端语音识别工具包&#xff0c;WeNet 2.0在此基础上进行了四项主要更新&#xff0c…

简明 | Yolo-v3结构理解摘要

简明 | ResNet特点、残差模块、残差映射理解摘要 目录 整体结构 DBL Res-n Res-unit concat 上采样 整体结构 网络主要包括两部分&#xff0c;一个部分是主干网络Darknet-53&#xff0c;一个部分使用特征金字塔(FPN)融合、加强特征提取并利用卷积进行预测。 DBL DBL&am…

从人工巡检到智能监管:视频AI智能监管技术驱动风电场智慧化发展

一、背景分析 随着全球对可再生能源需求的持续增长&#xff0c;风电作为清洁、可再生的能源形式&#xff0c;其重要性日益凸显。然而&#xff0c;风电场通常分布在偏远地区&#xff0c;面积广阔&#xff0c;环境复杂多变&#xff0c;这给风电场的运维管理带来了巨大挑战。为了…

CleanMyMac可以一键清理电脑,让Mac系统运行得更加流畅。有关CleanMyMac可以删除Mac重复的文件吗?苹果电脑怎么快速找到重复文件的问题?

一、CleanMyMac可以删除Mac重复的文件吗 作为一款专业级的苹果电脑清理软件&#xff0c;CleanMyMac具备多项深度清理和系统维护工具。软件拥有强大的文件管理系统&#xff0c;可以利用“空间透镜”等工具&#xff0c;筛选出相同体积、名称的文件。 图1&#xff1a;用CleanMyMa…

计算机网络408考研 2019

计算机网络408考研2019年真题解析_哔哩哔哩_bilibili 2019 1 1 1 1

麦田物语第二十天

系列文章目录 麦田物语第二十天 文章目录 系列文章目录一、构建地图信息系统二、生成地图数据 一、构建地图信息系统 我们上一节课已经做好了鼠标的显示&#xff0c;这节课需要构建地图的一些信息&#xff0c;例如&#xff1a;可挖坑&#xff0c;可丢弃物品等地区。我们点击地…

Altium designer学习笔记02 - 原理图库的创建与绘制

原理图库的创建与绘制 1. 元件符号的概述2. 单部件元件符号的绘制-实例电容3.子件原件符号的创建绘制&#xff08;示例 放大器&#xff09;4.已存在原理图直接生成元件库5.元件库的拷贝6.元件的检查与报告 1. 元件符号的概述 元件符号是元件在原理图上的表现形式&#xff0c;主…

Java语言程序设计——篇十二

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…

winform chart标记

下图为某个点的值大于25即标记为白色。 代码&#xff1a; // 设置曲线的样式Series series chart1.Series[1];// 画样条曲线&#xff08;Spline&#xff09; 散点图Pointseries.ChartType SeriesChartType.Spline;// 线宽2个像素series.BorderWidth 2;// 线的颜色&…

K8S Helm

简述 Helm 是 Kubernetes 的开源包管理器。它提供了提供、共享和使用为 Kubernetes 构建的软件的能力。它允许开发者定义、‌打包、‌发布和管理Kubernetes应用资源&#xff0c;‌类似于Linux下的apt或yum包管理器。‌Helm3的架构主要包括Helm客户端、‌Chart仓库以及Kubernet…

程序员窃喜!卡了大模型脖子的Json输出,OpenAI终于做到了100%正确

OpenAI上次提到JSON模式的概念&#xff0c;还是在去年的DevDay上。那是ChatGPT第一次拥抱JSON模式。 但这个功能可以说是饱受诟病。 经常遇到模型不遵循指令&#xff0c;不按照你想要的格式输出&#xff0c;即使在 prompt 中明确说了要按照指定格式&#xff08;比如Json、XML&…

【Java】字符/字符串转整数 常用的三个方法

前言&#xff1a; 做Oj题时&#xff0c;偶尔需要用到&#xff0c;久了不用&#xff0c;用到就得查一下&#xff0c;遂总结一篇用法&#xff0c;加深记忆。 目录 方法1&#xff1a;使用字符的ASCII值&#xff08;字符&#xff09; 方法2&#xff1a;使用Character.getNumeri…

【GCC】结合GPT4 延迟梯度学习1:公式推导及理论分析

大神的分析 本文主要借鉴。【TWCC 】基于gpt和python简化分析webrtc拥塞控制论文: Analysis and Design of the Google Congestion Contro for Web Real-time Communication (WebRTC)感觉应该学习好理论后再进行python 分析:【gcc】基于gpt和python的流程和延迟梯度分析另外:…