找到两个数组的前缀公共数组
题目
2657. 找到两个数组的前缀公共数组 - 力扣(LeetCode)
给你两个下标从 0 开始长度为 n
的整数排列 A
和 B
。
A
和 B
的 前缀公共数组 定义为数组 C
,其中 C[i]
是数组 A
和 B
到下标为 i
之前公共元素的数目。
请你返回 A
和 B
的 前缀公共数组 。
如果一个长度为 n
的数组包含 1
到 n
的元素恰好一次,我们称这个数组是一个长度为 n
的 排列 。
示例 1:
1 | 输入:A = [1,3,2,4], B = [3,1,2,4] |
示例 2:
1 | 输入:A = [2,3,1], B = [3,1,2] |
提示:
1 <= A.length == B.length == n <= 50
1 <= A[i], B[i] <= n
- 题目保证
A
和B
两个数组都是n
个元素的排列。
解题
首先我们观察到,两个数组都分别是整数1
到n
的排列(数组中各元素互不相同)。
解题思路:
设所求数组为ans
从左到右遍历数组A和B,在每轮循环中:
- 将
A[i]
和B[i]
分别放入集合A
以及集合B
- 接着计算两个集合中相同元素的个数,将这个值赋给
ans[i]
最后返回ans
即可。
这里由于数组A
和B
的长度都不超过50
,因此我们可以用位运算来优化操作。
用mask
二进制位上的1
和0
来表示元素是否存在集合中,用 &
运算求出集合的交集,最后按照二进制位中1
的个数来表示交集元素的数目。
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 翼同学的个人博客!
评论
ValineDisqus