3141:最大汉明距离(★★)
目录
题目
给定一个数组 nums
和一个整数 m
,每个元素 nums[i]
满足 0 <= nums[i] < 2m
,返回数组 answer
。answer
数组应该与 nums
有相同的长度,每个元素 answer[i]
表示 nums[i]
和数组中其它任何元素 nums[j]
的最大 汉明距离。
两个二进制整数之间的 汉明距离 定义为对应位上二进制位不同的数量(如果需要,添加前置零)。
示例 1:
输入:nums = [9,12,9,11], m = 4
输出:[2,3,2,3]
解释:
二进制表示为 nums = [1001,1100,1001,1011]
。
每个下标的最大汉明距离为:
nums[0]
:1001 与 1100 距离为 2。nums[1]
:1100 与 1011 距离为 3。nums[2]
:1001 与 1100 距离为 2。nums[3]
:1011 与 1100 距离为 3。
示例 2:
输入:nums = [3,4,6,10], m = 4
输出:[3,3,2,3]
解释:
二进制表示为 nums = [0011,0100,0110,1010]
。
每个下标的最大汉明距离为:
nums[0]
:0011 与 0100 距离为 3。nums[1]
:0100 与 0011 距离为 3。nums[2]
:0110 与 1010 距离为 2。nums[3]
:1010 与 0100 距离为 3。
提示:
1 <= m <= 17
2 <= nums.length <= 2m
0 <= nums[i] < 2m
分析
- 等价于求 nums[i] 的反码与数组中任意元素的最短距离
- 可以用多源 bfs 预处理出 [0,2^m) 每个数到数组元素的最短距离
解答
|
|
849 ms