左神算法进阶班4_3异或和为0划分最多数组

2023-11-16

【题目】

定义数组的异或和的概念:

数组中所有的数异或起来,得到的结果叫做数组的异或和,

比如数组{ 3,2,1 }的异或和是,3 ^ 2 ^ 1 = 0

给定一个数组arr,你可以任意把arr分成很多不相容的子数组,你的目的是:

分出来的子数组中,异或和为0的子数组最多。

请返回:分出来的子数组中,异或和为0的子数组最多是多少?

【题解】

异或运算性质:

满足交换律和结合律且 0 ^ m = m

DP,假设数组最后一个数的下标是i,并且数组存在一个最优划分,使得划分的子数组个数最多,

那么i有两种情况,

第一,i所在的划分区间异或为0;

第二,i所在的划分区间,异或不为0。

对于第一种情况dp[i] = dp[i - 1]的,

对于第二种情况,假设i的最优划分区间是[k, i],0到i的连续异或为sum,之要求出一个最大的下标k - 1,使得0到k - 1的异或也为sum就行了

【代码】

  

 1 #pragma once
 2 #include <iostream>
 3 #include <map>
 4 #include <vector>
 5 
 6 using namespace std;
 7 
 8 int XORSumArray(vector<int>v)
 9 {
10     int res = 0;
11     int Xor = 0;//异或和
12     vector<int>dp(v.size(), 0);
13     map<int, int>m;// key表示异或结果,value表示出现下标
14     m[0] = -1;//最初异或和为0的位置为-1
15     for (int i = 0; i < v.size(); ++i)
16     {
17         Xor ^= v[i];
18         if (m.find(Xor) != m.end())//存在
19             dp[i] = m[Xor] == -1 ? 1 : (dp[m[Xor]] + 1);
20         if (i > 0)
21             dp[i] = dp[i - 1] > dp[i] ? dp[i - 1] : dp[i];
22         m[Xor] = i;
23         res = res > dp[i] ? res : dp[i];
24     }
25     return res;    
26 }
27 
28 void Test()
29 {
30     vector<int>v;
31     v = {1,2,3,1,2,3,1,2,3};
32     cout << XORSumArray(v) << endl;
33     v = {1,2,3,4,5,6,7,8,9,10};
34     cout << XORSumArray(v) << endl;
35     v = { 1,2,3,4,5,6,7,8,9,10,11 };
36     cout << XORSumArray(v) << endl;
37 }

 

转载于:https://www.cnblogs.com/zzw1024/p/11070389.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

左神算法进阶班4_3异或和为0划分最多数组 的相关文章

  • 01背包问题变种:从长度为n的数组里选出m个数使和为固定值sum

    这个问题是我从leetcode上一道问题所想到的 原题 如果是从数组中选出2个数相加使之成为固定的数sum 这当然很简单 把数组中的数字遍历一遍 判断另一个数字是否也在数组中即可 代码如下 vector
  • 直线检测方法—LSD论文翻译

    附原文链接 LSD a Line Segment Detector 摘 要 LSD是一个线段检测器 能够在线性时间内得到亚像素级精度的检测结果 它无需调试参数就可以适用于任何数字图像上 并且能够自我控制错误数量的检测 平均来说 一个图像中允
  • 4399 C++笔试题

    1 写出一个函数 取到链表中倒数第二个节点 双链表 node getSec List mylist return mylist m tail gt m prev m prev为链表前指针 单链表 node getSec List mylis
  • Hash table and application in java

    查找的效率取决于在查找是比较的次数 次数越少效率越高 反之越低 最理想的情况是无需比较 一次存取便能找到所查找的记录 根据对应关系f找到给定值K的像f K hash function 应运而生 由此思想建的表称为hash table 集合h
  • 数据结构----链式栈

    目录 前言 链式栈 操作方式 1 存储结构 2 初始化 3 创建节点 4 判断是否满栈 5 判断是否空栈 6 入栈 7 出栈 8 获取栈顶元素 9 遍历栈 10 清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法 链接 线性表 栈 栈
  • PCL—低层次视觉—点云分割(RanSaC)

    点云分割 点云分割可谓点云处理的精髓 也是三维图像相对二维图像最大优势的体现 不过多插一句 自Niloy J Mitra教授的Global contrast based salient region detection出现 最优分割到底鹿死
  • 手把手教你实现一个向量

    文章目录 什么是向量 向量提供哪些接口 实现 宏定义 定义类 成员变量 构造函数与析构函数 构造函数 析构函数 成员函数 size get r put r e expand insert r e remove lo hi remove r
  • 亚利桑那州立大学周纵苇:研习 U-Net ——现有的分割网络创新

    雷锋网AI研习社按 经典的 Encoder Decoder 结构在目标分割问题中展现出了举足轻重的作用 然而这样一个相对固定的框架使得模型在感受野大小和边界分割精度两方面很难达到兼顾 本次公开课 讲者以 U Net 为案例分析 总结现有的分
  • 数据结构与算法书籍推荐

    学习数据结构与算法 还是很有必要看几本相关的书籍 但根据不同基础的人 合适看的书也不一样 因此 针对不同层次 不同语言的人 推荐几本市面上口碑不错的书 1 入门级 针对刚入门的同学 建议不要急着去看那些经典书 像 算法导论 算法 这些比较经
  • 以太坊系列之十五: 以太坊数据库

    以太坊数据库中都存了什么 以太坊使用的数据库是一个NOSQL数据库 是谷歌提供的开源数据leveldb 这里尝试通过分析以太坊数据库存储了什么来分析以太坊可能为我们提供哪些关于区块链的API 存储内容 NOSQL是一个key value数据
  • 堆栈01--用两个栈实现队列

    堆栈01 用两个栈实现队列 jz05 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 测试用例 队列先进先出 输入 1 2 输出 1 2 解析
  • 浮生六记

    浮生六记 目录 浮生六记卷一 闺房记乐 002 浮生六记卷二 闲情记趣 015 浮生六记卷三 坎坷记愁 022 浮生六记卷四 浪游记快 034 浮生六记 2 浮生六记卷一 闺房记乐 余生乾隆癸未冬十一月二十有二日 正值太平盛世 且在 衣冠之
  • 人工智能概念

    人工智能概念 人工智能就是用人工方法在机器 计算机 上实现的智能 或称机器智能 即是研究如何用计算机来表示和执行人类的智能活动 以模拟人脑所从事的推理 学习 思考和规划等思维活动 并解决需要人类的智力才能处理的复杂问题 如医疗诊断 管理决策
  • 用指针访问一维数组

    文章目录 顺序查找 数组方式实现 指针实现方式 对一位数组元素的访问有三种方式 指针变量的关系运算 引例 数组实现方式 主函数 指针实现方式 主函数 一维数组作为函数的参数 实际应用 顺序查找 要求用指针实现 在整数集合r中顺序查找与给定值
  • 区块链中的哈希算法

    区块链中的密码学 密码学在区块链中的应用主要有两个 哈希算法与非对称加密算法 这次主要对哈希算法进行详细的说明 哈希算法 哈希算法的特点有 1 输入可以为任意大小的字符串 2 产生固定大小的输出 3 可以在合理的时间内算出输出值 若要满足密
  • 用两个栈实现队列

    目录 一 栈的基本结构及其接口 二 我的队列结构定义 三 我的队列创建及其初始化 四 我的队列入队 五 我的队列出队 六 我的队列取队头元素 七 我的队列判空 八 我的队列销毁 一 栈的基本结构及其接口 栈的结构定义 typedef int
  • 牛客剑指offer刷题其他算法篇

    文章目录 构建乘积数组 题目 思路 代码实现 第一个只出现一次的字符
  • 按照层次遍历结果打印完全二叉树

    按照层次遍历结果打印完全二叉树 按照推论结果 l 层首个节点位置 2 h l 1 l 层节点间距 2 h l 1 1 编码实现 public static
  • 高精度运算合集,加减乘除,快速幂,详细代码,OJ链接

    文章目录 零 前言 一 加法 高精度加法步骤 P1601 A B 二 减法 高精度减法步骤
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路

随机推荐

  • Elastic Search 安装部署最全教程(Docker)

    一 部署单点ES 1 首先创建网络 因为我们还需要部署kibana容器 因此需要让es和kibana容器互联 这里先创建一个网络 docker network create es net 2 加载镜像 docker pull elastic
  • 刀片服务器 如何增加硬盘,IBM为刀片服务器添加新SAS及固态硬盘

    在调整过X64产品线后 我们又收到IBM将为服务器产品线添加新SAS硬盘及固态硬盘的消息 上周IBM刚发布了一款小尺寸的SAS硬盘 它只有2 5英寸 而之前的硬盘基本上都是3 5英寸的SCSI硬盘 因为IBM拥有世界上最好的硬盘研究和生产工
  • 疯壳4900、7072心率血压血氧心电四合一智能手表&模组电容触摸实现

    触摸 该手表的触摸是由RH6015C触摸IC完成的 该IC是一款内置稳压模块的单通道电容式触摸感应控制开关 IC 可以替代传统的机械式开关 RH6015可在有介质 如玻璃 亚克力 塑料 陶瓷等 隔离保护的情况下实现触摸功能 安全性高 RH6
  • delete 和 delete []的真正区别

    c 中对new申请的内存的释放方式有delete和delete 两种方式 到底这两者有什么区别呢 1 我们通常从教科书上看到这样的说明 delete 释放new分配的单个对象指针指向的内存 delete 释放new分配的对象数组指针指向的内
  • ubuntu下解决wps2019缺少字体问题

    准备字体包 链接 https pan baidu com s 1rsqn3CY SWS KWaKc0w83g 提取码 h9cs 复制 解压后的wps symbol fonts zip到 home usr share fonts下 sudo
  • 西门子PLC—用 SCL 编写你的第一个 TIA 代码

    前言 使用梯形图编写程序时 博途编辑器是通过网络段 把程序分成一段一段的 编辑器可以插入若干个网络段 每一个网络段可以有各自的注释 而SCL是文本语言 不分网络段 在LAD FBD语言内增加SCL的除外 这就需要需要用其他的方法来 解决程序
  • 面试总结大全

    预定义变量 0 脚本名 所有的参数 所有的参数 参数的个数 当前进程的PID 上一个后台进程的PID 上一个命令的返回值 0表示成功 for 循环次数是固定的 for i in 取值 范围 1 20 zhangsan lisi wanger
  • 牛客网——华为题库(41~50)

    华为题库 41 称砝码 42 学英语 43 迷宫问题 44 Sudoku 45 名字的漂亮度 46 截取字符串 48 从单向链表中删除指定值的节点 50 四则运算 41 称砝码 include
  • C++通过回车结束循环输入

    试想一个案例 假设需要你输入n行数字 而每一行输入的数字数量都未知 不定 如何通过C 来实现这一操作 本贴笔者给出一个具体案例 首先规定输入的行数 而后在每一行输入不定量的数字 最后将每一个数字对应的值 以及与其匹配的行数输出 例如 输入
  • 实战07- 模型融合:利用AdaBoost元算法提高分类性能

    元算法 meta algorithm 是对其他算法进行组合的一种方式 即模型融合 模型融合主要分为三种 Bagging Boosting和Stacking 思想 将弱分类器融合成强分类器 融合后比最强的弱分类器更好 视频导学 https w
  • 什么是高防CDN,高防CDN是如何防御网络攻击的呢?

    高防CDN是一种新型的网络构建法式 N是构建在现有网络基础之上的智能虚拟网络 依靠部署在各地的边缘服务器 通过中心平台的负载均衡 内容分发 调度等功能模块 使用户就近获取所需内容 降低网络拥塞 提高用户访问响应速度和命中率 CDN的关键技术
  • tensorflow2.1.0安装

    原来一直用1 x的tf 最近安装2 初始源error无法安装 下载本地包后 换清华源之类的 channels defaults show channel urls true default channels https mirrors tu
  • 机器学习(一)

    文章目录 人工智能 人工智能的诞生 人工智能的发展历程 人工智能与机器学习的关系 机器学习 机器学习的发展历程 讨论 机器学习的必要性 机器学习的定义 机器学习的三要素 机器学习的基本概念 作业 人工智能 人工智能的诞生 人工智能诞生于一群
  • Spring Boot项目中使用 TrueLicense 生成和验证License(服务器许可)

    一 简介 License 即版权许可证 一般用于收费软件给付费用户提供的访问许可证明 根据应用部署位置的不同 一般可以分为以下两种情况讨论 应用部署在开发者自己的云服务器上 这种情况下用户通过账号登录的形式远程访问 因此只需要在账号登录的时
  • python机器学习相关的操作 numpy,GridSearchCV(网格搜索)等

    numpy切片操作 视频讲解 numpy 简单入门 GridSearchCV的简单使用视频讲解 SVM参数优化 metrics中的precision score recall score accuracy score import nump
  • C语言中的system有什么作用,C语言中system函数的使用

    System 是c语言中为了调用windows系统命令来设置的 它包含在头文件 include中 具体的使用可以在system help 后发现帮助命令 命令如下 有关某个命令的详细信息 请键入 HELP 命令名 ASSOC 显示或修改文件
  • python语言通过neo4j构建知识图谱

    用python语言通过neo4j构建知识图谱 安装neo4j社区版 启动neo4j neo4j语法 python编写代码 结果 注意 可能遇到的问题 安装neo4j社区版 下载neo4j 安装相应版本jdk 例 jdk15 neo4j4 2
  • CentOS自动挂载光驱

    今天在CentOs下安装测试数据库 光驱居然找不到了 以前都是自动就能找到的 服务器上也是CentOs 开发库也在CentOs 没出现过这个问题 虽然知道linux一直都有这个问题 改用手动挂载 报以下错误 mount can t find
  • 用宏定义字节对齐

    有时候我们需要对一个数字节对齐 实例代码 include
  • 左神算法进阶班4_3异或和为0划分最多数组

    题目 定义数组的异或和的概念 数组中所有的数异或起来 得到的结果叫做数组的异或和 比如数组 3 2 1 的异或和是 3 2 1 0 给定一个数组arr 你可以任意把arr分成很多不相容的子数组 你的目的是 分出来的子数组中 异或和为0的子数