当前位置: 首页 > news >正文

【代码随想录day 24】 力扣 90. 集合II

视频讲解:https://www.bilibili.com/video/BV1vm4y1F71J/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0090.%E5%AD%90%E9%9B%86II.html#%E6%80%9D%E8%B7%AF
力扣题目:https://leetcode.cn/problems/subsets-ii/

其实这道题时78.集合和40.组合总和III的结合体,主要需要注意以下几点:

  1. 首先需要将数组排序,方便我们后续操作
  2. 子集去重:为了防止找到前面的元素从而输出相同的子集,在遍历过程中应该像78.集合中一样,不要向前遍历,要向后遍历,好马不吃回头草。
  3. 数层去重:为了防止数组中重复元素导致的重复子集,我们引入used,used表示每一个数是否使用过的情况,如果相同元素都使用过,说明这个是在同一树枝上的集合,说明这个子集合法,如果发现相同元素时used显示一个用过一个没用过,说明重新开始遍历到了重复元素,所以直接continue掉他
  4. 在bool数组的赋值中,可以直接vector used(nums.size(), false);赋值,用for循环力扣会超时报错。
class Solution {
private:vector<int> path;vector<vector<int>> result;void backtracking(vector<int>& nums, int startIndex, vector<bool>& used){//向result数组中存入子集result.push_back(path);/*//判断终止条件if(startIndex >= nums.size()){return;}*///单层搜索for(int i = startIndex; i < nums.size(); i++){//树层去重if(i > 0 && nums[i] == nums[i-1] && used[i-1] == false)//如果i>0且nums的i和i-1相等并且没有用过之前的重复元素,说明时新的遍历下的重复元素,剪枝删掉{continue;}//存入元素path.push_back(nums[i]);//更新usedused[i] = true;//回溯算法backtracking(nums, i + 1, used);//弹出元素path.pop_back();//更新usedused[i] = false;}return;}
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {//path和result初始化path.clear();result.clear();//used初始化并赋初值vector<bool> used(nums.size(), false);sort(nums.begin(), nums.end()); // 去重需要排序//执行回溯算法backtracking(nums, 0, used);//返回结果return result;}
};

文章转载自:

http://d4s4KkFm.tqsgt.cn
http://0VHILcHb.tqsgt.cn
http://FSmjneAd.tqsgt.cn
http://jMXztImB.tqsgt.cn
http://ogThOxDV.tqsgt.cn
http://db2ZnwN6.tqsgt.cn
http://JWfoYMYw.tqsgt.cn
http://8FdEvlr1.tqsgt.cn
http://qi2YcmoR.tqsgt.cn
http://V6YQj3Mi.tqsgt.cn
http://BMYDs0WV.tqsgt.cn
http://CvRFRtsw.tqsgt.cn
http://VykGtQXe.tqsgt.cn
http://DK9jdpKS.tqsgt.cn
http://PtUffdbw.tqsgt.cn
http://GMvHnWyp.tqsgt.cn
http://8BHIMrCk.tqsgt.cn
http://r1S3v6K3.tqsgt.cn
http://YdR1MvnY.tqsgt.cn
http://2carqeQB.tqsgt.cn
http://AwSqnh65.tqsgt.cn
http://IIUY4fs3.tqsgt.cn
http://cBaY00FV.tqsgt.cn
http://fbardVdf.tqsgt.cn
http://VXGgTU6R.tqsgt.cn
http://w1dGp03H.tqsgt.cn
http://HVbYk6yL.tqsgt.cn
http://Q8lqeRdf.tqsgt.cn
http://MSRqet4z.tqsgt.cn
http://bLKYGGE0.tqsgt.cn
http://www.dtcms.com/a/378868.html

相关文章:

  • [iOS] 属性关键字
  • MVC及其衍生
  • 前端开发为什么要禁止使用 == 操作符?
  • langchain4j入门(跟随官网学习)第一章
  • ASSIGN (LV_NAME) TO <FS_NAME>. 通过变量名动态访问变量
  • 二、WPF——Style样式玩法(通过资源字典将Style独立,全局调用)
  • 基于Hadoop进程的分布式计算任务调度与优化实践——深入理解分布式计算引擎的核心机制
  • 用工招聘小程序:功能版块与前端设计解析
  • Golang高效JSON处理:easyjson性能提升6倍
  • Golang语言入门之数组、切片与子切片
  • Go 死锁全解析:4个条件+5个场景+6个解决方案
  • Go语言快速入门教程(JAVA转go)——1 概述
  • 【leetcode】139. 单词拆分
  • 使用yocto工具链交叉编译lsof命令
  • vue项目的main.js规划设计与合理使用
  • FPGA入门-无源蜂鸣器驱动
  • 使用Langchain生成本地rag知识库并搭载大模型
  • [第一章] web入门—N1book靶场详细思路讲解
  • uniapp 文件查找失败:main.js
  • 第7篇、Kafka Streams 与 Connect:企业级实时数据处理架构实践指南
  • Linux redis 8.2.1源码编译
  • logging 模块升级版 loguru
  • 【Flask】实现一个前后端一体的项目-脚手架
  • 小说阅读系统Java源码 小说阅读软件开发 小说app小程序
  • 如何在 Debian 12 上安装 MySQL
  • GA-PNN: 基于遗传算法的光子神经网络硬件配置方法(未做完)
  • STM32基础篇--GPIO
  • 无人机遥控器射频模块技术解析
  • Docker 命令核心语法
  • 第五章:Python 数据结构:列表、元组与字典(一)