首页 > 其他分享 >[LeetCode] 1863. Sum of All Subset XOR Totals

[LeetCode] 1863. Sum of All Subset XOR Totals

时间:2024-05-20 13:40:55浏览次数:19  
标签:Subset subset XOR nums int Sum array total

The XOR total of an array is defined as the bitwise XOR of all its elements, or 0 if the array is empty.

For example, the XOR total of the array [2,5,6] is 2 XOR 5 XOR 6 = 1.
Given an array nums, return the sum of all XOR totals for every subset of nums.

Note: Subsets with the same elements should be counted multiple times.

An array a is a subset of an array b if a can be obtained from b by deleting some (possibly zero) elements of b.

Example 1:
Input: nums = [1,3]
Output: 6
Explanation: The 4 subsets of [1,3] are:

  • The empty subset has an XOR total of 0.
  • [1] has an XOR total of 1.
  • [3] has an XOR total of 3.
  • [1,3] has an XOR total of 1 XOR 3 = 2.
    0 + 1 + 3 + 2 = 6

Example 2:
Input: nums = [5,1,6]
Output: 28
Explanation: The 8 subsets of [5,1,6] are:

  • The empty subset has an XOR total of 0.
  • [5] has an XOR total of 5.
  • [1] has an XOR total of 1.
  • [6] has an XOR total of 6.
  • [5,1] has an XOR total of 5 XOR 1 = 4.
  • [5,6] has an XOR total of 5 XOR 6 = 3.
  • [1,6] has an XOR total of 1 XOR 6 = 7.
  • [5,1,6] has an XOR total of 5 XOR 1 XOR 6 = 2.
    0 + 5 + 1 + 6 + 4 + 3 + 7 + 2 = 28

Example 3:
Input: nums = [3,4,5,6,7,8]
Output: 480
Explanation: The sum of all XOR totals for every subset is 480.

Constraints:
1 <= nums.length <= 12
1 <= nums[i] <= 20

找出所有子集的异或总和再求和。

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

例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 = 1 。
给你一个数组 nums ,请你求出 nums 中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。

注意:在本题中,元素 相同 的不同子集应 多次 计数。

数组 a 是数组 b 的一个 子集 的前提条件是:从 b 删除几个(也可能不删除)元素能够得到 a 。

思路

按照求 subset 的方式,枚举每个元素参与和不参与 XOR 运算的情况,然后把所有情况的结果累加起来。

复杂度

时间O(2^n) - 这里的 n 是 12
空间O(n)

代码

Java实现

class Solution {
	int res = 0;

    public int subsetXORSum(int[] nums) {
        if (nums.length == 1) {
			return nums[0];
		}
		helper(nums, 0, 0);
		return res;
    }

	private void helper(int[] nums, int index, int xor) {
		if (index == nums.length) {
			res += xor;
			return;
		}
		// 当前元素参与XOR
		helper(nums, index + 1, xor ^ nums[index]);
		// 当前元素不参与XOR
		helper(nums, index + 1, xor);
	}
}

标签:Subset,subset,XOR,nums,int,Sum,array,total
From: https://www.cnblogs.com/cnoodle/p/18201717

相关文章

  • [ARC178C] Sum of Abs 2 题解
    题意:给定\(n\)和\(L\)以及\(n\)个数\(a_i\)。对于每个\(1\lei\len\),求出一个长度为\(L\)的\(b\)序列满足:\(\sum_{i=1}^{L-1}\sum_{j=i+1}^{L}|b_j-b_i|=a_i\),并最小化\(b\)中的最大值。显然\(b\)中元素的顺序不影响原式的结果,所以我们可以假定\(b\)是不......
  • BUUctf xor
    0x01关于xorxor,即为计算机中的异或计算,相同为0,不同为1。下面是关于异或加密的四个定理A^0=AA^A=0(A^B)^C=A^(B^C)(B^A)^A=B^0=B//明文B;密码A观察可知,经历异或加密后的密文,再次进行异或算法即可得到明文。0x02题解先丢进Die看一眼......
  • LeetCode 918. Maximum Sum Circular Subarray
    原题链接在这里:https://leetcode.com/problems/maximum-sum-circular-subarray/description/题目:Givena circularintegerarray nums oflength n,return themaximumpossiblesumofanon-empty subarray of nums.A circulararray meanstheendofthearray......
  • Summer '24:不容错过的Salesforce Flow 10大新功能!
    Flow是整个Salesforce平台自动化的未来。自从WorkflowRules和ProcessBuilders被淘汰,Salesforce将重点放在了Flow上,一直在将大量资源用于开发Flow创新,本次Summer'24中Flow也有不少亮眼的更新!01FlowCreationWizard和Flow类型创建Flow与以前有所不同。你看到的第一步只是让......
  • Minimizing the Sum
    题目链接https://codeforces.com/problemset/problem/1969/C分析分析样例就可以知道这不是一道贪心题,所以我们可以采用dp寻常的dp一般都是从左向右,但是这样就会导致变成的值可能在左边,比如32221所以我们换一种dp方式,注意到k的范围很小,长度为n的序列在n-1次操作就可以变成......
  • CF1965D Missing Subarray Sum题解
    题目链接点击打开链接题目解法感觉一点都不好想\fn因为最后的序列\(a\)是回文的,所以只有以中心点对称的子段和出现次数为奇数,其他都为偶数考虑有没有什么知道所有子段和的做法,可以方便推出缺失一个的答案令\(g_{l,r}\)为\(l\)到\(r\)的子段和知道\(g_{1,n}\)删......
  • 64 - Minimum Path Sum 最小路径和
    64-MinimumPathSum最小路径和问题描述Givenamxngridfilledwithnon-negativenumbers,findapathfromtoplefttobottomright,whichminimizesthesumofallnumbersalongitspath.Note:Youcanonlymoveeitherdownorrightatanypointinti......
  • AtCoder Beginner Contest 351 E - Jump Distance Sum
    题目链接Hint1:只能斜着走,容易想到黑白棋盘,\((x+y)\%2==0\)位于一个团,\((x+y)\%2==1\)位于另一个团,分别求和。Hint2:\(dist=max(|x1-x2|,|y1-y2|)\),这是切比雪夫距离,将坐标系倾斜\(45^{\circ}\),改为曼哈顿距离\(dist=|x1-x2|+|y1-y2|\),即\(X=x+y,Y=x-y\),这样就可以将横纵坐标......
  • [H&NCTF] maybe_xor题解
    maybe_xor感觉这道逆向题与其说是考逆向水平,倒不如说是考编写脚本的能力首先题目给了个远程地址,nc连接会回显ELF:接一串base64编码的东东,解码后发现是ELF文件。用IDA打开发现是从数据段读取24个字节到栈上并进行异或,每个字节异或的值都不同,但异或后的结果不会写回栈程序的目......
  • Rocketmq 不同的topic要配不同的consumegroup
    Rocketmq不同的topic要配不同的consumegroup使用Rocketmq一定要注意,如果项目中要订阅两个topic,一定要保证consumeGroup是两个不同的。这是因为,Consumer会定期发送心跳,默认是30s一次。心跳会像全部broker发送,心跳包内容包括groupname,topicname1。然后broker端会......