子集II--(回溯+去重)

news/2024/11/28 13:30:53/

1题目

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例 1:

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10

2链接

题目链接:90. 子集 II - 力扣(LeetCode)

视频链接:回溯算法解决子集问题,如何去重?| LeetCode:90.子集II_哔哩哔哩_bilibili

3解题思路

这道题就是78.子集和40.组合总和II的结合体,但是一定要理解“树层去重”和“树枝去重”的区别

用示例中的[1, 2, 2] 来举例,如图所示: (注意去重需要先对集合排序

从图中可以看出,同一树层上重复取2 就要过滤掉,同一树枝上就可以重复取2,因为同一树枝上元素的集合才是唯一子集!

递归三部曲也不写了,没必要。要是自己想不起来了就去看前面的题解

记得是加了个used来判断是树枝去重还是树层去重。

我直接嘎嘎上代码

4代码

class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums, int startIndex, vector<bool>& used) {result.push_back(path);for (int i = startIndex; i < nums.size(); i++) {// used[i - 1] == true,说明同一树枝candidates[i - 1]使用过// used[i - 1] == false,说明同一树层candidates[i - 1]使用过// 而我们要对同一树层使用过的元素进行跳过if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {continue;}path.push_back(nums[i]);used[i] = true;backtracking(nums, i + 1, used);used[i] = false;path.pop_back();}}public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {result.clear();path.clear();vector<bool> used(nums.size(), false);sort(nums.begin(), nums.end()); // 去重需要排序backtracking(nums, 0, used);return result;}
};

下班淦饭


http://www.ppmy.cn/news/185623.html

相关文章

笔记本系统转移到固态硬盘

硬件 我的笔记本型号是华硕飞行堡垒FX53VW&#xff0c;17年暑假买的&#xff0c;&#xff08;吐槽一下华硕&#xff1a;坑&#xff0c;巨坑&#xff0c;超级坑&#xff0c;给我的原装硬件就没一个好用的&#xff0c;系统磁盘在买过来一个月后就开始卡&#xff0c;内存也是几个…

固态硬盘对于linux提升,固态硬盘在Linux系统下提升使用率妙方

固态硬盘(SSD)不是普通的硬盘。文件在固态硬盘中的处理方式与地普通硬盘中的方式完全不同&#xff0c;如果安装Linux不同版本时没有把这些差异考虑进去&#xff0c;就很难充分发挥固态硬盘的优势&#xff0c;而且很可能在使用一段时间后造成严重的性能下降。 修改默认的固态硬盘…

固态硬盘测试软件有哪些,手把手教你测试固态硬盘!硬盘测试软件大汇总

原标题:手把手教你测试固态硬盘!硬盘测试软件大汇总 如今固态硬盘已经成为了电脑不可或缺的核心配件,装好电脑后,如何快速的通过主流测试软件,检测固态硬盘状态和速度。今天我就和大家聊一聊,有哪些主流的硬盘测试软件。 1、CrystalDiskMark 先来聊聊大名鼎鼎的CDM(Cryst…

固态硬盘装到服务器上影响寿命吗,谈谈SSD固态硬盘的寿命问题

分享者:iweb2020 阅读量:371 小金子学院目录最新收录:投资寓言故事之鸡的故事 D 囻 囼协ёжзий клм项 D 囻 囼协ёжзий клм项 谈谈SSD固态硬盘的寿命问题 相信不少人都知道固态硬盘寿命不是很长,当然,这个是与机械硬盘相比得出的结论,实际上还是能够使用很久…

固态硬盘是什么接口_固态硬盘都有哪些接口,是否通用吗?

固态硬盘只要接口支持,一般通用的, SATA接口固态硬盘接口的SATA/SATA2/SATA3通用, SATA接口标准的支持的一个功能就是智能的模式设置。SATA硬盘连接到主板上的SATA接口上后,SATA控制器会与SATA硬盘通信协商,使硬盘工作在SATA硬盘和SATA接口两者中最低的模式上,保证良好的…

固态硬盘接口综述

一、SATA 6Gbps接口 SATA 6Gbps其实是SATA Revision 3.0的一个参数标准之一&#xff0c;主要是用来表达使用的是SATA Revision 3.0标准&#xff0c;速度更快&#xff0c;相对SATA Revision 2.0。SATA是硬盘接口的标准规范&#xff0c;实际上SATA 6Gbps接口这个说法并不规范&am…

Redis的del和unlink区别

Redis的del和unlink区别 一、del命令 del命令是Redis提供的一个常规的删除键的命令。它的语法如下&#xff1a; DEL key [key ...]其中&#xff0c;key是要删除的键名。可以指定多个键名&#xff0c;删除多个键。如果指定的键不存在&#xff0c;则会被忽略。 del命令会直接…

l440加装固态硬盘ngff_[转载]Thinkpad E431装NGFF固态硬盘图文详解

固态硬盘安装一个月了,开机在28秒内,写这边文章记录一下Thinkpad E431安装固态硬盘的经过。 首先是选型,目前NGFF技术相对于msata和sata3来说,是个新生事物,代表着未来几年PC机器标配固态硬盘类型的方向,因为NGFF接口的SSD有个很大的优点就是体积小且功耗较小,在笔记本日…