给出一个大小为n的数组a和整数t,定义区间[l,r](0<=l<r<=n-1),若存在下标i,j(l<=i<j<=r)属于区间[l,r],且a[i]异或a[j]=t,那么称[l,r]是非奇特区间,如不存在,则[l,r]是奇特区间,求a数组里的奇特区间个数。
[2,4,8],6
1
[2,3,4],6
2
考点:哈希
限制 1 秒 / 256MB | 核心代码模式(实现给定函数)
推荐方向:哈希
本题切入点
区间内存在 a[i]^a[j]=t 转成前缀异或:若有 pre[i]^pre[j]=t 则区间非奇特,用哈希表记录前缀异或值即可快速判定。
用哈希表把「查找/计数」的开销降到 O(1) 均摊。
思路框架(哈希 通法 · 非本题专属)
实现要点:Python 用 dict / collections.Counter / defaultdict;C++ 用 unordered_map。
复杂度:时间 O(n) 均摊 | 空间 O(n)
该范式的通法易错点
样例 1:输入 [2,4,8],6 → 输出 1
因为2异或4为6,等于t,所以只有区间[1,2]是奇特区间,对应的数组是[4,8],数组不能为[2,4],数组也不能为[2,4,8],因为里面包含了2和4
样例 2:输入 [2,3,4],6 → 输出 2
因为2异或4为6,等于t,所以区间[0,1],[1,2]是奇特区间,对应的数组分别为[2,3],[3,4]
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2024年秋招-贝壳找房-Java工程师-第一批笔试;2024年秋招-贝壳找房-C++工程师-第一批笔试;2024年秋招-贝壳找房-机器学习/数据挖掘工程师-第一批笔试。