news 2026/6/3 2:21:34

LeetCode 2657. 找到两个数组的前缀公共数组【集合,位运算】中等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 2657. 找到两个数组的前缀公共数组【集合,位运算】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。

为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库:https://github.com/memcpy0/LeetCode-Conquest。在这一仓库中,你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类题目归纳、通用解法总结等,还可以看到原题出现频率和相关企业等重要信息。如果有其他优选题解,还可以一同分享给他人。

由于本系列文章的内容随时可能发生更新变动,欢迎关注和收藏征服LeetCode系列文章目录一文以作备忘。

给你两个下标从0开始长度为n的整数排列AB

AB前缀公共数组定义为数组C,其中C[i]是数组AB到下标为i之前公共元素的数目。

请你返回AB前缀公共数组

如果一个长度为n的数组包含1n的元素恰好一次,我们称这个数组是一个长度为n排列

示例 1:

输入:A=[1,3,2,4],B=[3,1,2,4]输出:[0,2,3,4]解释:i=0:没有公共元素,所以C[0]=0。 i=113是两个数组的前缀公共元素,所以C[1]=2。 i=2123是两个数组的前缀公共元素,所以C[2]=3。 i=31234是两个数组的前缀公共元素,所以C[3]=4

示例 2:

输入:A=[2,3,1],B=[3,1,2]输出:[0,1,3]解释:i=0:没有公共元素,所以C[0]=0。 i=1:只有3是公共元素,所以C[1]=1。 i=2123是两个数组的前缀公共元素,所以C[2]=3

提示:

  • 1 <= A.length == B.length == n <= 50
  • 1 <= A[i], B[i] <= n
  • 题目保证AB两个数组都是n个元素的排列。

方法 位运算加速求交集

用二进制数表示集合,两个二进制数的 AND 就是集合的交集,二进制数中 1 的个数就是交集的大小。

classSolution{publicint[]findThePrefixCommonArray(int[]a,int[]b){longp=0,q=0;for(inti=0;i<a.length;i++){p|=1L<<a[i];q|=1L<<b[i];a[i]=Long.bitCount(p&q);}returna;}}
classSolution{public:vector<int>findThePrefixCommonArray(vector<int>&a,vector<int>&b){uint64_tp=0,q=0;for(inti=0;i<a.size();i++){p|=1ULL<<a[i];q|=1ULL<<b[i];a[i]=popcount(p&q);}returna;}};
classSolution:deffindThePrefixCommonArray(self,a:List[int],b:List[int])->List[int]:ans=[]p=q=0forx,yinzip(a,b):p|=1<<x q|=1<<y ans.append((p&q).bit_count())returnans
funcfindThePrefixCommonArray(a,b[]int)[]int{varp,quintfori,x:=rangea{p|=1<<x q|=1<<b[i]a[i]=bits.OnesCount(p&q)}returna}

复杂度分析:

  • 时间复杂度:O ( n ) O(n)O(n),其中n nnn u m s numsnums的长度。
  • 空间复杂度:O ( 1 ) O(1)O(1)。返回值不计入。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 2:20:21

从MySQL分库分表到OceanBase分区:实战迁移中的那些坑与最佳实践

从MySQL分库分表到OceanBase分区&#xff1a;实战迁移中的那些坑与最佳实践当数据库规模突破单机极限时&#xff0c;MySQL开发者往往选择分库分表作为标准解决方案。但随着分布式数据库技术成熟&#xff0c;OceanBase这类原生分布式数据库开始崭露头角。本文将揭示从MySQL分库分…

作者头像 李华
网站建设 2026/6/3 2:19:13

找钣金加工厂去哪?从用电用工看真实产能产区

答:国内钣金加工厂分布极广、门槛参差不齐,真正具备稳定精密产能的工厂主要集中在三个弧形产区——长三角(苏浙沪)、珠三角(粤)、京津冀,以及成渝、华中两个补充节点。核心结论是:选产区先看品类,选工厂先看用电和用工规模——这两个信号比营业执照、厂房面积更能反映真实产能。…

作者头像 李华
网站建设 2026/6/3 2:14:53

0531核心代码编程-企业内部门的最大层级-100分

题目描述&#xff1a;企业的组织架构以树形结构表示&#xff0c;每个节点包含&#xff1a; left: 左子部门&#xff08;第一个子部门&#xff09; right 右子部门&#xff08;第二个子部门&#xff09; 为了优化管理结构&#xff0c;实现扁平化管理&#xff0c;需要计算企业的最…

作者头像 李华