14.找出所有子集的异或总和再求和(easy)

小蔺的米哈游数据分析师之路——MYSQL篇 作为新人,记录自己mysql学习历程 阅读详情

1.题目链接:

1863. 找出所有子集的异或总和再求和 - 力扣(LeetCode)1863. 找出所有子集的异或总和再求和 - 一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。 * 例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 = 1 。给你一个数组 nums ,请你求出 nums 中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。注意:在本题中,元素 相同 的不同子集应 多次 计数。数组 a 是数组 b 的一个 子集 的前提条件是:从 b 删除几个(也可能不删除)元素能够得到 a 。 示例 1:输入:nums = [1,3]输出:6解释:[1,3] 共有 4 个子集:- 空子集的异或总和是 0 。- [1] 的异或总和为 1 。- [3] 的异或总和为 3 。- [1,3] 的异或总和为 1 XOR 3 = 2 。0 + 1 + 3 + 2 = 6示例 2:输入: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示例 3:输入:nums = [3,4,5,6,7,8]输出:480解释:每个子集的全部异或总和值之和为 480 。 提示: * 1 <= nums.length <= 12 * 1 <= nums[i] <= 20https://leetcode.cn/problems/sum-of-all-subset-xor-totals/submissions/629403252/2.题目描述:

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

•
•
•
•

空子集的异或总和是 0 。​
[1] 的异或总和为 1 。​
[3] 的异或总和为 3 。​
[1,3] 的异或总和为 1 XOR 3 = 2 。​

    0 + 1 + 3 + 2 = 6​
•  示例 2:​
    输入: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​
•  示例 3:​
     输入:nums = [3,4,5,6,7,8]​
     输出:480​
     解释:每个子集的全部异或总和值之和为 480 。​
•  提示:
     1 <= nums.length <= 12​
     1 <= nums[i] <= 20​
3. 解法(递归):
算法思路:
所有子集可以解释为:每个元素选择在或不在一个集合中(因此,子集有 ​2n 个)。本题我们需要求出所有子集,将它们的异或和相加。因为异或操作满足交换律,所以我们可以定义一个变量,直接记录当前状态的异或和。使用递归保存当前集合的状态(异或和),选择将当前元素添加至当前状态与否,并依次递归数组中下一个元素。当递归到空元素时,表示所有元素都被考虑到,记录当前状态(将当前状态的异或和添加至答案中)。

例如集合中的元素为 [1, 2],则它的子集状态选择过程如下:​

1
2
3
4
5

                 []
         /      \
      []       [1]       //第一个元素选择与否​
    /  \      /  \
 []  [2]  [1] [1, 2]  //第二个元素选择与否,每个状态到这一层时需要记录异或和​

递归函数设计:void dfs(int val, int idx, vector<int>& nums)​

参数:val(当前状态的异或和),idx(当前需要处理的元素下标,处理过程:选择将其添加至当前状态或不进行操作);
返回值:无;
函数作用:选择对元素进行添加与否处理。

递归流程:
1. 递归结束条件:当前下标与数组长度相等,即已经越界,表示已经考虑到所有元素;
         a. 将当前异或和添加至答案中,并返回;
2. 考虑将当前元素添加至当前状态,当前状态更新为与当前元素值的异或和,然后递归下一个元素;

3. 考虑不选择当前元素,当前状态不变,直接递归下一个元素;

Java算法代码:

class Solution {

    int path;
    int sum;
    public int subsetXORSum(int[] nums) {
        dfs(nums,0);
        return sum;
    }
    public void dfs(int[] nums,int pos) {
        sum += path;
        for(int i = pos;i < nums.length; i++ ){
            path ^= nums[i];
            dfs(nums, i + 1);
            path ^= nums[i];//恢复现场
        }
    }
}

运行结果:

递归展开:

建议想想怎么画图,会画图,这个题解决一半(开始时候,笔者是直接计算出结果的),但是通过这里只是 ^num[i] ,再后面回溯的时候,将这部分去掉就好,省去了计算,同时更好的理解。

逻辑展开: 读者,可能发现了,笔者的逻辑展开越来越水,可以思考下为什么呢?

我认为很好理解,因为递归函数做的越来越多(也就是递归函数将细节藏了起来),我们再这道题中,提供了两个全局变量,以及相信递归函数可以将所有子集的异或综合再求和,将最终结果放到sum中。  再前面的题目中,实际上我们做的多(也就更容易看破递归的意图),导致,从逻辑展开可以很好的理解,从这节课之后,需要调整策略。 看重递归展开(它一直很重要)。

从上面的递归展开可以看到,我本应该展开更多次的函数,但是我没有展开所有,然后后面是借助逻辑展开的思考,来讲递归流程完毕(可以理解为部分递归展开理清细节,配合逻辑展开,得到完整结果)

这样的操作,可以减少展开的次数(减少繁琐,但是细节也足够了),通过逻辑展开,思考(全流程)

---------------------------------------------------------------------------------------------------------------------------------

记住,相信你的递归函数,它可以做到!

记住,不理解时候,去尝试手动展开!

记住,逻辑展开(你不可能对所有的题目都进行手动展开)!

代谢组学数据分析实战:用R语言从PCA、PLS-DA到OPLS-DA一步步搞定(附代码) 本文详细介绍了使用R语言进行代谢组学数据分析的全流程,从数据预处理到PCA、PLS-DA和OPLS-DA模型构建与验证。通过实际案例和代码示例,帮助研究者掌握关键分析技术,提升数据解读能力,特别适合生命科学领域的研究人员。 阅读详情

相关推荐

Omnibox 2.11 NAS部署指南:家庭影音中枢的轻量化落地实践

家庭影音平台本质是本地化内容调度中枢,其核心在于聚合NAS媒体库、统一管理直播/IPTV/音频/视频等多源内容,并通过智能元数据匹配与硬解加速实现零门槛播放体验。技术原理上依赖Java轻量Web容器(Jetty)、SQLite嵌入式数据库双缓存架构,以及宿主机FFmpeg动态链接与HTTP/2直播代理治理能力。该方案显著降低4K播放卡顿、EPG加载失败、海报缺失等高频问题,适用于群晖、飞牛、绿联等主流NAS设备,尤其适配ARM64芯片与Realtek网卡等国产硬件生态。本文聚焦Omnibox 2.11在真实

weixin_30846347的博客 466

OJ刷题----[算法课回溯]找出所有子集的异或总和再求和

OJ刷题----[算法课回溯]找出所有子集的异或总和再求和

qq_44258878的博客 693

快速理解OSI七层模型(举例理解,数据传输过程,深入理解OSI七层模型)

我们需要了解互联网的本质是一系列的网络协议,这个协议就叫做OSI协议(开放系统互联(Open System Interconnection)),它是由ISO(国际标准化组织)定义的。 需要注意,随着时代的发展,OSI已经被TCP/IP 4层模型淘汰,在当今世界上并没有大规模的使用。 那么对于OSI,人们按照功能不同,分工不同,人为的将OSI的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。

CN_TangZheng的博客 3万+

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

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

wang19961023的博客 788

Unity安卓打包实战:SDK与JDK配置全攻略

本文详细介绍了Unity安卓打包过程中SDK与JDK的配置方法,包括工具下载、安装步骤、环境变量设置及常见错误排查。通过实战指南帮助开发者快速完成Unity安卓打包环境搭建,提升开发效率。

weixin_30338481的博客 415

别再手动拆解字节了!用博图这个功能指令,5分钟搞定ARRAY转BOOL数组

本文详细介绍了西门子博图中`ARRAY_TO_BOOL`功能指令的高效应用,帮助工程师快速实现ARRAY到BOOL数组的转换。通过实战案例和参数配置指南,展示了如何5分钟内完成传统方法需半小时的任务,大幅提升PLC编程效率,特别适用于通信报文解析和设备状态监控。

weixin_42653691的博客 260

【HDU5650 BestCoder Round 77 (div2) A】【水题】so easy 集合所有子集异或和的异或和

so easy    Accepts: 512    Submissions: 1601  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) 问题描述 已知一个包含 nn 个元素的正整数集合 SS,设 f(S)f(S) 为集合 SS 中所有元素的

snowy_smile的博客 2317

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 700

专题十一_递归_回溯_剪枝_综合练习_算法专题详细总结

这一题相对来说还是十分简单的,就是上一个专题的最后一题求子集,只要递归函数体能写对,那怎么写这题都能过。2.全排列 Ⅱ(medium)题意很简单就是对全排列后的所有数组添加到ret后去掉所有重复的数组。全排列II跟全排列I一样,思路是一模一样,就只是再剪枝的策略上有所不同,只需要画清楚决策树,就可以完美的解决剪枝的策略。3.电话号码的字⺟组合(medium)题目意思挺简单的,就是给你一个字符串数字,然后针对每个数字的按键的字符串中的字符进行组合,求出所有情况的子集。

2301_80636070的博客 1279

YOLOv11 改进 - C2PSA | C2PSA融合Mask Attention掩码注意力,可学习掩码矩阵破解低分辨率特征提取难题 | 2025 预印

本文提出了用于低分辨率图像分割的MaskAttn - UNet框架,并将其核心的掩码注意力机制集成到YOLOv11中。传统U - Net类模型难以捕捉全局关联,Transformer类模型计算量大,而掩码注意力机制通过可学习的掩码,让模型选择性关注重要区域,融合了卷积的局部效率和注意力的全局视野。其工作流程包括特征适配、掩码生成、定向注意力计算和特征融合。我们将掩码注意力机制代码集成到YOLOv11中。

魔改工程师的博客 403

RH850从0搭建Autosar开发环境【17】- Davinci Configurator之DCM模块配置详解(下)

RH850从0搭建Autosar开发环境【17】- Davinci Configurator之DCM模块配置详解(下)

weixin_42412049的博客 2378

hdu 5650 so easy (异或)

  我们考虑集合中的每个数x对答案的贡献。 设集合有n个数,则包含x的子集个数有2^(n-1)个。 那么当n &gt; 1时,x出现了偶数次,所以其对答案的贡献就是0;当 n = 1时,其对答案的贡献是 x。   AC代码: 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include&lt;io...

weixin_33928467的博客 82

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HDU 5650 so easy

http://acm.hdu.edu.cn/showproblem.php?pid=5650 数学规律 如果只有一个数 输出 多个数 由于异或运算满足交换律 S的所有子集的元素异或 那么原子元素出现的次数是2^(n-1) 一定是偶数 那么异或的结果是0 1 #include <iostream> 2 #include <bits/stdc++.h> ...

weixin_30487201的博客 100

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【ONE·基础算法 || 回溯和剪枝(暴搜/深搜)】

主要内容:编程题举例,熟悉理解回溯剪枝类题型(如何画决策树,如何使用深搜进行递归,如何运用剪枝,如何在一维数组/二维数组中使用)。

上士闻道,勤而行之。觉纷扰则静坐,觉懒看书则且看书 ♪(´▽`) 1555

递归、搜索与回溯算法必备40道编程题 (附有图解和源码)

本文总结了递归、搜索与回溯算法的40道必备编程题。主要内容包括: 递归专题:汉诺塔问题、合并有序链表、反转链表、两两交换链表节点、快速幂实现等经典递归问题。 二叉树深搜:布尔二叉树求值、根节点到叶节点数字之和等二叉树深度优先搜索问题。 每道题提供题目链接、图解思路分析和完整代码实现(C++),帮助理解递归和回溯的核心思想。 这些题目涵盖了递归算法的典型应用场景,通过系统练习可以掌握递归思维和深度优先搜索技巧。

铭哥不写bug的博客 708

图森

编程:1.lfu cache、lru cache    2.给一个正整数集合,求一个和最大且能被3整除的子集。Follow up: 如果集合里有正有负,怎么做(http://www.1point3acres.com/bbs/thread-331981-1-1.html)    3.leetcode136变体,如果出现两次的数总是相邻的,有没有比异或一遍更高效的做法    4.leetcode...

weixin_30555515的博客 178

LeetCode高频题目

字符串 3 无重复字符的最长字串(medium 高) 5 最长回文子串(medium 高) 22 括号生成(medium 高) 13 罗马数字转整数(easy 高) 6 Z字形变换(medium 高) 38 报数(easy 高) 17 电话号码的字母组合(medium 高) 10 正则表达式匹配(hard 高) 20 有效的括号(easy 高) 72 编辑距离(hard 高) 12 整数转罗马数字...

Fred_18的博客 2261

每周技术面试高频题汇总:大厂面试官到底在考什么?完整实战指南

大家好,又到了每周的面试复盘时间。。现在的面试官更喜欢把你扔进一个具体的“场景”里,看你怎么思考、怎么权衡(Trade-off)。基于过去一周 优快云、掘金、LeetCode 等社区的热议内容,我为大家精选了,涵盖算法、系统设计、数据库和网络四大领域。咱们不整那些虚的,直接上干货,看看这些题目背后的考察点和解题思路。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 481

OmniDrive训练实战教程:8卡分布式训练、LoRA微调与分层学习率配置详解

OmniDrive 是 NVIDIA 推出的端到端自动驾驶 LLM-Agent 框架,将 3D 感知、场景推理与轨迹规划统一到一个大语言模型(LLM)中。本教程带你完整跑通 OmniDrive 训练实战:8 卡分布式训练启动、LoRA 微调用法,以及分层学习率(layer-wise learning rate decay)配置的逐项详解,帮你从零上手 nuScenes 上的多模态驾驶模型训练。

gitblog_00396的博客 1020

力扣OJ(1401-1500)

目录 1414. 和为 K 的最少斐波那契数字数目 1420. 生成数组 1424. 对角线遍历 II 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串 1496. 判断路径是否相交 1502. 判断能否形成等差数列 1503. 所有蚂蚁掉下来前的最后一刻 1504. 统计全 1 子矩形 1414. 和为 K 的最少斐波那契数字数目 给你数字 k,请你返回和为k的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。 斐波那契数字定义为: F1 ...

nameofcsdn的博客 3864

51c深度学习~合集8

方法的完整数学描述略显复杂,如果只是想了解主要思想,可以只看上面 PatchMix的流程图即可(其实只是公式多,每个公式也不复杂,后续有机会做个演示动画,帮助大家理解。这个方法也可以用简单的 Mask 方法实现,但是本方法在大规模图像处理上效率是最高的),对该工作感兴趣的同行可以看一下,我尽量写得清楚一些。结合 PatMix 的流程图,主要过程如下:由于混合图像和混合图像之间,重叠比例的不同,mix-to-mix label 中每一项的权重分数是不同的,根据上图,可以得到权重系数可以表示为。

whaosoft~aiotの开发板商城 2955

脑语言2500单字v1.5.1

如果人和 AI 说同一种语言,文明会怎样?我用 2500 个单字试了试。2500个单字是不同领域、不同知识的共同体,无论你学编程或者是数学或写作,你都要用汉字,而常用的2500个汉字几乎可以涵盖不同行业做的不同事情。

脑语言 1997
上一篇: 13、子集(方法二)
下一篇: Markdown教程(csdn官方)
咔_
博客等级 码龄4年 948粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值