算法题每日一练---第53天:所有子集的异或总和

简介: 一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。

4.png

一、问题描述


一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 ,则异或总和为 0

  • 例如,数组 [2,5,6]异或总和2 XOR 5 XOR 6 = 1

给你一个数组 nums ,请你求出 nums 中每个 子集异或总和 ,计算并返回这些值相加之


题目链接:所有子集的异或总和


二、题目要求


样例

输入: nums = [5,1,6]
输出: 28
解释: [5,1,6] 共有 8 个子集:
- 空子集的异或总和是 0 。
- [5] 的异或总和为 5 。
- [1] 的异或总和为 1 。
- [6] 的异或总和为 6 。
- [5,1] 的异或总和为 5 XOR 1 = 4 。
- [5,6] 的异或总和为 5 XOR 6 = 3 。
- [1,6] 的异或总和为 1 XOR 6 = 7 。
- [5,1,6] 的异或总和为 5 XOR 1 XOR 6 = 2 。
0 + 5 + 1 + 6 + 4 + 3 + 7 + 2 = 28


考察

位运算、子集问题
建议用时20~40min


三、问题分析


本题是位运算的第8题,没了解过位运算相关知识点可以看这一篇文章,讲解比较详细:

算法题每日一练---第45天:位运算


想要完成这道题目,需要攻壳两个难点:


1.子集

依靠普通的方法遍历所有的子集肯定是不行的,之前我写个一篇利用位运算实现子集的,也算是为这一题做一个铺垫吧。


2.异或计算

子集求解之后,在循环内部进行异或运算就行了,运算规则如下:

符号:^

运算规则:两个二进制位相反为1,相同为0

示例:1001^0111=1110


四、编码实现


classSolution {
public:
intsubsetXORSum(vector<int>&nums) {
inti,j,n=nums.size(),sum=0,ans;//初始化变量for(i=0;i<(1<<n);i++)//第一层for循环        {
ans=0;//初始化for(j=0;j<n;j++)//第二层for循环            {
if(i&(1<<j))//符合条件                {
ans=ans^nums[j];//异或计算                }  
            }
sum+=ans;//叠加        }
returnsum;
    }
};

五、测试结果3.png

相关文章
|
7月前
|
存储 算法 程序员
【算法训练-回溯算法 二】【子集组合问题】子集、组合、子集II、组合总和
【算法训练-回溯算法 二】【子集组合问题】子集、组合、子集II、组合总和
68 0
|
2月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
115 0
|
6月前
|
机器学习/深度学习 存储 算法
LeetCode题目 90:五种算法 回溯\迭代\位掩码\字典树\动态规划实现 子集ll
LeetCode题目 90:五种算法 回溯\迭代\位掩码\字典树\动态规划实现 子集ll
|
6月前
|
算法 搜索推荐
数据结构和算法——快速排序(算法概述、选主元、子集划分、小规模数据的处理、算法实现)
数据结构和算法——快速排序(算法概述、选主元、子集划分、小规模数据的处理、算法实现)
48 0
|
7月前
|
算法
异或算法
异或算法
|
算法
代码随想录算法训练营第四十一天 | LeetCode 416. 分割等和子集
代码随想录算法训练营第四十一天 | LeetCode 416. 分割等和子集
50 1
代码随想录算法训练营第四十一天 | LeetCode 416. 分割等和子集
|
7月前
|
算法
常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum
常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum
1119 1
|
7月前
|
存储 算法 程序员
【算法训练-数组 一】【数组子集】:最长无重复子数组
【算法训练-数组 一】【数组子集】:最长无重复子数组
48 0
|
算法 测试技术 C#
C++字典树算法:找出强数对的最大异或值 II
C++字典树算法:找出强数对的最大异或值 II
|
算法
代码随想录算法训练营第二十七天 | LeetCode 93. 复原 IP 地址、78. 子集、90. 子集 II
代码随想录算法训练营第二十七天 | LeetCode 93. 复原 IP 地址、78. 子集、90. 子集 II
63 0