欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 【Leetcode 每日一题】1863. 找出所有子集的异或总和再求和

【Leetcode 每日一题】1863. 找出所有子集的异或总和再求和

2025/4/8 22:31:29 来源:https://blog.csdn.net/2401_88859777/article/details/147005982  浏览:    关键词:【Leetcode 每日一题】1863. 找出所有子集的异或总和再求和

问题背景

一个数组的 异或总和 定义为数组中所有元素按位 X O R XOR XOR 的结果;如果数组为 ,则异或总和为 0 0 0
例如,数组 [ 2 , 5 , 6 ] [2,5,6] [2,5,6]异或总和 2 X O R 5 X O R 6 = 1 2 \ XOR \ 5 \ XOR \ 6 = 1 2 XOR 5 XOR 6=1
给你一个数组 n u m s nums nums,请你求出 n u m s nums nums 中每个 子集异或总和 ,计算并返回这些值相加之
注意:在本题中,元素 相同 的不同子集应 多次 计数。
数组 a a a 是数组 b b b 的一个 子集 的前提条件是:从 b b b 删除几个(也可能不删除)元素能够得到 a a a

数据约束

  • 1 ≤ n u m s . l e n g t h ≤ 12 1 \le nums.length \le 12 1nums.length12
  • 1 ≤ n u m s [ i ] ≤ 20 1 \le nums[i] \le 20 1nums[i]20

解题过程

子集先异或再求和的结果,等于数组中所有元素的或和 o r S u m orSum orSum 2 n − 1 2 ^ {n - 1} 2n1 的乘积。
证明比较复杂,参考 灵神的题解。

具体实现

class Solution {public int subsetXORSum(int[] nums) {int orSum = 0;for (int num : nums) {orSum |= num;}return orSum << (nums.length - 1);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词