解题思路
本题是自定义排序 + 模拟数组操作,可按以下步骤处理:
- popcount 排序键:对 32 位有符号整数,统计二进制中
1 的个数(含符号位),记为 popcount32(x);排序键为 (popcount32(x), x) 升序。Python 可用 bin(x & 0xFFFFFFFF).count('1'),Java 用 Integer.bitCount,C++ 对 unsigned 做 __builtin_popcount。
- 初始排序:进入操作循环前先对
data 排序。
- 单次操作:读取排序后数组下标
i, j:
- 计算
merged = arr[i] | arr[j](i == j 时即 arr[i] | arr[i]);
- 删除:
i == j 时 pop(i) 一次;否则先删较大下标再删较小下标,避免下标错位;