左神进阶班-最大异或和 的分割 个数

dp_所有长度为K的连续区间、异或 题目 给定你长度n=5000的数组A, 【0 <= A[] < 2048】,你可以将任意元素替换成任意数字 给定k <= n,要求你所修改后的数组B 满足: 所有长度为k的连续区间,其异或和为0 问你最少需要修改几个元素 A = [1, 2, 3, 1, 2, 3] k = 3 所有的子区间为[1,2,3] [2,3,1] [3, 1, 2] [1, 2, 3],其异或和均为0 所以,ans = 0 这个问题是非常非常复杂的,如果没找对思路的话 首先我们要关注的,其实并不是“异或”这个 阅读详情

 

#include<iostream>
#include<unordered_map>
#include<algorithm>
using namespace std;
int getMaxLen(int arr[], int length){
	if(length == 0)
		return 0;
	unordered_map<int,int> map;
	map[0] = -1;
	// map.insert(make_pair(0,-1));
	int xor_ =0;
	int len =0;
	int* dp = new int[length];
	//对于每一个当前i: 其最大分割 异或和=0 数组 个数 这样找
	// 对于 最后一个i 在 最后一个 以他结尾的小分组中,若这个小分组 异或和不为0,则 dp[i] == dp[i-1]。
	// 若 最后一个 小部分 的异或和为0, 则 从开头到i这个位置有一个异或和xor1, 若我们找到一个k 位置,在k位置上,从开始异或和到k的值也为xor1,则必有 
	// k+1 位置 到 i位置的异或和 为0.  从而 dp[i]位置的值 为 dp[k] + 1
	// 0 - i 异或和 xor1 ,0-k异或和 xor1, 则 设 k+1 - i 异或和 为xor2, 由于xor1 ^ xor2 = xor1 ,所以xor2必为0;
	for(int i=0;i<length;i++){
		xor_ ^= arr[i];
		if(map.find(xor_) != map.end()){
			int pre = map.find(xor_)->second;
			dp[i] = (pre == -1)?1 : dp[pre]+1; 
		}
		if(i>0){
			dp[i] = max(dp[i],dp[i-1]);
		}
		map[xor_] = i;
		len = max(dp[i],len);
	}
	return len;
}
int main(){
	int n,aim;
	cin >> n;
	int* arr = new int[n];
	for(int i=0;i<n;i++){
		cin >> arr[i];
	}
	cout << getMaxLen(arr, n);
	return 0;
}#include<iostream>
#include<unordered_map>
#include<algorithm>
using namespace std;
int getMaxLen(int arr[], int length){
	if(length == 0)
		return 0;
	unordered_map<int,int> map;
	map[0] = -1;
	// map.insert(make_pair(0,-1));
	int xor_ =0;
	int len =0;
	int* dp = new int[length];
	//对于每一个当前i: 其最大分割 异或和=0 数组 个数 这样找
	// 对于 最后一个i 在 最后一个 以他结尾的小分组中,若这个小分组 异或和不为0,则 dp[i] == dp[i-1]。
	// 若 最后一个 小部分 的异或和为0, 则 从开头到i这个位置有一个异或和xor1, 若我们找到一个k 位置,在k位置上,从开始异或和到k的值也为xor1,则必有 
	// k+1 位置 到 i位置的异或和 为0.  从而 dp[i]位置的值 为 dp[k] + 1
	// 0 - i 异或和 xor1 ,0-k异或和 xor1, 则 设 k+1 - i 异或和 为xor2, 由于xor1 ^ xor2 = xor1 ,所以xor2必为0;
	for(int i=0;i<length;i++){
		xor_ ^= arr[i];
		if(map.find(xor_) != map.end()){
			int pre = map.find(xor_)->second;
			dp[i] = (pre == -1)?1 : dp[pre]+1; 
		}
		if(i>0){
			dp[i] = max(dp[i],dp[i-1]);
		}
		map[xor_] = i;
		len = max(dp[i],len);
	}
	return len;
}
int main(){
	int n,aim;
	cin >> n;
	int* arr = new int[n];
	for(int i=0;i<n;i++){
		cin >> arr[i];
	}
	cout << getMaxLen(arr, n);
	return 0;
}

 

北京微店面经(2016年12月12更新,顺利拿到offer) 北京微店面经 阅读详情

相关推荐

PCB工艺-SI9000-模型选择

本文介绍了PCB设计中常用的阻抗计算模型,主要包括外层、内层和嵌入式三类共12种计算模型,涵盖单端/差分、共面等不同场景。针对阻抗计算中的关键参数,文章提供了经验值参考:表层走线厚度0.035mm(1.4mil),内层0.0152mm(0.6mil);并列出常见PP材料的介电常数(3.8-4.5)和成品厚度(3-7.5mil)。作者建议90%的设计问题可通过上述模型解决,层叠参数建议咨询PCB厂家获取。

weixin_50120208的博客 1385

hdoj 5845 Best Division 【字典树 + dp】

hdoj 5845 Best Division 题意:给定n个正整数,要求分成K段连续区间,使得所有区间的最大异或值 dp[i]dp[i]为a[1]−a[i]a[1] - a[i]的最优解 dp[i]=max(dp[j])+1,(i−L=jidp[i] = max(dp[j]) + 1 ,(i - L &&sum[j]⊗sum[i]=X)sum[j] ⊗ sum[i] 其中sum[i]su

世界很大 638

基于ensp大学网络规划与设计(完整文档+ensp拓扑图)

大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量的经验。我相信分享是一种双赢的方式,通过分享,我可以帮助他人提升技术水平,同时也能够得到学习交流的机会。 在我的文章中,你将会看到我对于各种编程语言、开发工具以及常见问题的解析和分析。我会结合自己的实际项目经验,为你提供实用的解决方案和优化技巧。我相信这些经验不仅能够

qq1325513482的博客 5万+

Java数组

–拓展了解 –掌握理解 1.数组:是java中的一种数据类型,且可以一次存储多个数据(8种基本数据类型的数据/对象),且使用的时候要给出长度(数组的容量) 1.1数组的分类(维度) 1)一维数组:像火车 2)二维数组:像表格 3)三维或者多维数组我们不研究 1.2数组的基本使用 1)数组的定义

weixin_44496141的博客 247

手把手教你解决Windows 10网络驱动器无法访问问题(附详细排查步骤)

本文详细指导Windows 10用户解决网络驱动器无法访问的常见问题。通过从现象快速定位到系统排查,提供了从检查网络连通性、修复凭据权限到调整高级设置的完整步骤,特别是针对“找不到网络路径”等错误,帮助用户高效恢复对共享资源的访问。

weixin_29233857的博客 517

【feature_column处理】- indicator_column(指示列)和embedding_column(嵌入列)

1. 开胃菜 我们先来了解一下tf.feature_column.input_layer def input_layer(features, feature_columns, weight_collections=None, trainable=True, cols_to_vars=None, cols_to_output_tensors=None)

DataAlgo 1487

dp - 求连续区间异或的最大值

For an array b of length m we define the function f as f(b)={b[1]ifm=1f(b[1]⊕b[2],b[2]⊕b[3],…,b[m−1]⊕b[m])otherwise, where ⊕ is bitwise exclusive OR. For example, f(1,2,4,8)=f(1⊕2,2⊕4,4⊕8)=f(3,6...

weixin_33910137的博客 1274

CKA考试实战指南--从备考到通关的完整攻略

本文提供了一份全面的CKA考试实战指南,涵盖从备考规划、资源选择到高效练习环境搭建的全过程。重点解析了考试核心内容,特别是占分30%的故障排除难点,并分享了集群升级、etcd备份等高频考点的突破技巧与临场实战策略,帮助考生系统掌握Kubernetes实操技能,顺利通过认证。

weixin_28839549的博客 490

区间划分DP模板题!!!!

/* 把一个数组分成若干区间,当一个区间异或和为0时贡献+1,求最大贡献值 */ #include<bits/stdc++.h> using namespace std; int main(){ /* 测试证明mp[xr]=i;可以覆盖 map<int,int> g;cout<<g[0]<<endl; g[0]=1;cout...

cj1064789374的博客 303

C++学习(四六六)Multiple parse contexts are available for this file

Note: Multiple parse contexts are available for this file. Choose the preferred one from the editor menu 参考: "Multiple parse contexts" in Qt creator | Qt ForumHi Do you use sessions? https://bugreports.qt.io/browse/QTCREATORBUG-18521 Anyway, its not.

hankern的专栏 4610

姿态传感器/陀螺仪之IIS2DLPC 应用驱动程序设计

* 转换为°C单位 (参考温度为25°C,灵敏度为16 LSB/°C) */

corlin6688的博客 220

左神算法基础班

转载链接:https://blog.youkuaiyun.com/ccnuacmhdu/article/details/105361645 排序 各种排序代码实现 import java.util.*; public class Main{ public static void main(String[] args){ int testTime = 500000;//测试次数 int size = 100; int scope = 100; boolean flag = true; fo.

weixin_44021180的博客 2210

基于截图详解:SAP GUI for Java 如何设置登录链接,以及 conn= 连接字符串该怎么写

摘要:SAP GUI for Java 的连接属性配置关键是在"高级"页签的"conn="后填写连接字符串。连接字符串格式取决于网络拓扑:直连应用服务器使用"/H/主机/S/端口";通过消息服务器负载均衡使用"/M/消息服务器/S/端口/G/组名";经SAProuter访问则需添加路由器前缀。配置时需注意专家模式会覆盖其他页签设置,且连接字符串还支持附加参数如客户端、语言和默认事务码。具体填写内容应根据Basis团队提供的系统信

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 251

第一节课:

b站左神算法课笔记之高级提升篇第一节课

qq_45552815的博客 292

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记教程与代码地址P1 出圈了!讲课之外我们来聊聊算法和数据结构!以及未来!P2 1.认识复杂度和简单排序算法P3 2.认识O(NlogN)的排序P4 3.详解桶排序以及排序内容大总结P5 4.链表P6 5.二叉树P7 6. 图P8 7.详解前缀树和贪心算法P9 8. 暴力递归P10 9. 补充视频P11 10.基础提升 哈希函数与哈希表等P12 11.基础提升

sinat_39448069的博客 8498

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

算法学习(B站左神算法课)

学习算法的笔记

学习总结 1271

算法大神左程云耗尽5年心血分享程序员代码面试指南第2版文档

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。M、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。

2401_84419009的博客 885

程序员代码面试指南题单

注:本题单上的题目一般不会做详细分析,主要是记录给自己看的,想知道为什么可以去买左神的书,讲的非常详细! 第一章:栈和队列 设计一个有 getMin 功能的栈:链接 由 2 个栈组成的队列:略 如何仅用递归函数和栈操作逆序一个栈:略 猫狗队列:略 用一个栈实现另一个栈的排序:略 用栈来求解汉诺塔问题:略 生成窗口最大值数组:链接 单调栈结构:链接 求最大子矩阵的大...

weixin_30287169的博客 443

hdu3415 dp最大k字段和

很好的单调队列优化DP,一开始以为扫一遍记录sum就可以了,贡献了3个Wrong之后发现想漏了情况,看了网上的思想,自己写了个单调队列维护前缀和,各种调试之后终于水过,主要问题是自己没考虑清楚边界情况,然后嵌套数组的时候直接用下标了。   ACcode: #include #include const int nsize=111111; int n,k,T; int Maxs

丿Smilē 丶晨星灬 1101

ABC141 F - Xor Sum 3(线性基)

题意: 给定n个数a[], 要求将这n个数分成两个非空集合S1和S2,满足S1所有数的异或和+S2所有数的异或和最大。 输出最大值。 数据范围:2<=n<=1e5,0<=a(i)<260

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 315

HDU6579系列题解

题目链接 题目大意: 给你一个长度为n的数列,有m次操作,操作有两种: 在数列末尾插入一个数 查询区间的子集异或最大值 操作强制在线,n ≤\le≤ 5e5,m ≤\le≤ 5e5,所有数值域[0, 2302^{30}230]。 难度:Ag 分析: 线性基可以处理的操作是: 在数列末尾插入一个数 查询全局的子集异或最大值 由于线性基的长度很短,因此我们可以将数列所有前缀的线性基保存下来。1...

红黑树的落叶 1013

51nod 2527 Or 和 Sum 和2526 最大异或和 二进制拆分

2526 最大异或和 2.0 秒 262,144.0 KB 20 分 3级题 给定nn个数x1…xnx1…xn,请你选择n个数p1…pnp1…pn,使得p1<=x1,p2<=x2......p1<=x1,p2<=x2......,并且p1xorp2…pnp1xorp2…pn的值尽量大。问这个最大的异或和是多少。 n≤100,0≤xi≤109...

pxlsdz的博客 1521

左神算法学习日记——子数组最大异或和

求子数组最大异或和,要求时间复杂度为O(n) class Node { public: Node() { next[0] = NULL; next[1] = NULL; } //构造之前所有异或和的前缀树 void addnum(int num) { Node* trytree = this; for (int i = 31; i >= 0; i--)//应该...

w275412237的博客 1001

左神算法进阶班7_1求最大异或和的子数组

【题目】 给定一个数组,求子数组的最大异或和。 一个数组的异或和为,数组中所有的数异或起来的结果。 【题解】 必须以i结尾的最大异或和的最长数组 暴力解为O(N3),就是每个数都暴力循环一遍 异或运算的性质: e1 ^ e2 = e3 e1 = e2 ^ e3; e2 = e3 ^ e1; 使用前缀树: 将0~i的异或和计算出来,换算成二进制数据 然后将二进制数据...

weixin_30632089的博客 268

20.8.11 分组异或

1.分组异或 原题 原题解 设这两个数字分别是a和b,由于相同的数字进行异或运算结果为0,则nums数组中所有数字进行异或运算的最终结果=a^b,记这个结果为sum 分组异或: a和b至少有1bit不相同(在sum的值为1的位上) 两个相同的数,在任一bit都是相同的 取mask=1<<n,使a & mask ≠ b & mask 举例:sum=011,a和b在d1和d0位不相等,则mask=010/001,使a & mask ≠ b & mask 特例:mask

nameNOTbad的博客 626

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

【题目】 定义数组的异或和的概念: 数组中所有的数异或起来,得到的结果叫做数组的异或和, 比如数组{ 3,2,1 }的异或和是,3 ^ 2 ^ 1 = 0 给定一个数组arr,你可以任意把arr分成很多不相容的子数组,你的目的是: 分出来的子数组中,异或和为0的子数组最多。 请返回:分出来的子数组中,异或和为0的子数组最多是多少? 【题解】 异或运算性质: 满足交换律和结合律且 ...

weixin_34194317的博客 489
上一篇: 左神进阶班 -morris 遍历: 带你装* 带你飞
下一篇: 左神 进阶班 - 子数组、子串问题的统一解法(子数组为aim的最大长度)
就叫温华啦
博客等级 码龄11年 28粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值