LeetCode刷题之HOT100之子集

2024/6/11 周二,闷热,很热。两天没有做题了,前天去附近一景点《十八重溪》游玩,去了才知道暂停开放,只能在附近转转了,瀑布是看不到了。昨天在宿舍呆了一天,今天早上起来就来了实验室。补三张图就开始做题啦!
在这里插入图片描述图一、十八重溪牌匾
在这里插入图片描述
图二、涓涓细流
在这里插入图片描述
图三、我的溯溪鞋派上了用场嘿嘿,水非常清澈呀
好啦,下面开始做题啦

1、题目描述

在这里插入图片描述

2、逻辑分析

这题给定一个整数数组nums,元素互不相同,要求返回做有可能的子集。怎么做呢?题解如是说:

因为nums大小不为0,故解集中一定有空集。令解集一开始只有空集,然后遍历nums,每遍历一个数字,拷贝解集中的所有子集,将该数字与这些拷贝组成新的子集再放入解集中即可

  1. 例如[1,2,3],一开始解集为[[]],表示只有一个空集。
  2. 遍历到1时,依次拷贝解集中所有子集,只有[],把1加入拷贝的子集中得到[1],然后加回解集中。此时解集为
    [[], [1]]
  3. 遍历到2时,依次拷贝解集中所有子集,有[], [1],把2加入拷贝的子集得到[2], [1, 2],然后加回解集中。此时解集为
    [[], [1], [2], [1, 2]]
  4. 遍历到3时,依次拷贝解集中所有子集,有[], [1], [2], [1, 2],把3加入拷贝的子集得到[3], [1, 3], [2,3], [1, 2, 3],然后加回解 集中。此时解集为[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]

以上规律即可写出相应代码

3、代码演示

public List<List<Integer>> subsets(int[] nums) {// 创建一个空的二维列表 res,用于存储 nums 的所有可能子集List<List<Integer>> res = new ArrayList<>();// 初始时,将一个空集(即不包含任何元素的子集)添加到 res 中  // 因为空集是任何集合的子集,包括 nums  res.add(new ArrayList<Integer>());// 遍历 nums 数组中的每一个元素for(int i = 0; i < nums.length; i++){// subNum 存储在添加当前元素 nums[i] 之前,res 中已有的子集数量  // 这是因为我们接下来要基于这些已有的子集来生成新的子集  int subNum = res.size();// 遍历 res 中已有的每一个子集for(int j = 0; j < subNum; j++){// 复制当前遍历到的子集,避免在后续操作中修改原始子集List<Integer> list = new ArrayList<>(res.get(j));// 将当前元素 nums[i] 添加到复制的子集中,生成一个新的子集list.add(nums[i]);// 将新生成的子集添加到 res 中 res.add(list);}}// 返回包含 nums 所有可能子集的二维列表return res;}

以上是代码的描述,上面注释很清晰,就不过多赘述。

4、复杂度分析

  • 时间复杂度: O ( n × 2 n ) O(n\times2^n) O(n×2n),算法中使用了两个嵌套的循环。
    对于外层循环,每次迭代都会处理数组nums中的一个新元素,因此外层循环的复杂度是O(n),其中n是数组nums的长度。
    对于内层循环,其复杂度依赖于当前res列表中已有子集的数量。在第一次迭代时,res中只有一个空集,因此内层循环执行一次。在第二次迭代时,res中有两个子集(一个空集和一个只包含nums[0]的子集),因此内层循环执行两次。依此类推,每次外层循环迭代时,内层循环执行的次数都会翻倍。因此,内层循环的总执行次数是1+ 2 + 4 + … + 2^(n-1), 其和为2^n - 1。故时间复杂度为 O ( n × 2 n ) O(n\times2^n) O(n×2n)

  • 空间复杂度 O ( n × 2 n ) O(n\times2^n) O(n×2n)。在最坏的情况下,即数组nums的所有可能子集都被生成时,res列表将包含2^n个子集 (包括空集)。每个子集都是一个ArrayList实例,它们将占据额外的空间。因此,空间复杂度是O(2^n), 因为我们需要存储2^n个子集。

over,再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

端午节,来看看这本应景的“龙舟书”吧!

大家端午安康呀图片~~ 端午节&#xff0c;不仅要吃粽子&#xff0c;还要看龙舟&#xff01;图片 所以&#xff0c;今天就和大家分享一本“龙舟书”——《精进ChatGPT&#xff1a;高效应用实战88例》&#xff01; 不仅和今天的端午节应景&#xff0c;还和当今的AI时代很配图片…

AI Agent 热门的10篇论文

人工智能代理领域广阔,涵盖广泛的主题,包括多代理系统、强化学习、上下文感知系统以及将大型语言模型 (LLMs) 集成到基于代理的系统中。以下是 arXiv 的一些顶级论文,涵盖了人工智能代理的各个方面: A Framework For Intelligent Multi Agent System Based Neural Network …

Python 基础语法详解(四)

Python 基础语法详解&#xff08;四&#xff09; Python 条件语句最简单的 if 语句基本的 if 语句实战&#xff1a; 复杂 if 语句实战&#xff1a; 看一看 elif 的好处题目&#xff1a;代码实现&#xff1a; 三元表达式格式为&#xff1a;实操&#xff1a; Python 条件语句 在…

Windows 托盘图标实现类封装及使用(附源码)

在系统桌面右下角的托盘区域,创建一个托盘图标,已经是很多软件的标配了,特别是IM即时通讯软件,要在托盘图标上显示来消息时的闪动头像。 其实托盘图标创建很简单,使用起来也比较方便,主要是调用Shell_NotifyIcon API函数,传入不同参数表示对应的操作: 1)NIM_AD…

synchronized 的底层实现

用户态与内核态 JDK 早期&#xff0c;synchronized 叫做重量级锁&#xff0c; 因为申请锁资源必须通过 kernel&#xff08;指大多数操作系统的核心部分&#xff09;&#xff0c;系统调用。 ;hello.asm ;write(int fd, const void *buffer, size_t nbytes)section datamsg db …

数据结构(用 JS 实现栈和队列【三种方式】)

栈 先进后出 JS 实现栈 栈 : 用数组实现入栈 push ---- 时间复杂度 O(1)出栈 pop ---- 时间复杂度 O(1) let stack [];// 入栈 stack.push("a"); stack.push("b");console.log(stack);// 出栈 -- 先进后出 -- b 出栈 stack.pop();console.log(stack);队…

安装golang

官网:All releases - The Go Programming Language (google.cn) 下载对应的版本安装即可

【Python】 如何使用Pandas DataFrame的‘in‘和‘not in‘进行筛选,就像在SQL中一样

基本原理 在Python的Pandas库中&#xff0c;DataFrame是一个强大的数据结构&#xff0c;用于处理表格数据。Pandas提供了多种方法来筛选DataFrame中的数据&#xff0c;其中使用in和not in是模仿SQL查询中IN和NOT IN操作的一种方式。在SQL中&#xff0c;IN用于筛选出在某个列表…

线性代数|机器学习-P9向量和矩阵范数

文章目录 1. 向量范数2. 对称矩阵S的v范数3. 最小二乘法4. 矩阵范数 1. 向量范数 范数存在的意义是为了实现比较距离&#xff0c;比如&#xff0c;在一维实数集合中&#xff0c;我们随便取两个点4和9&#xff0c;我们知道9比4大&#xff0c;但是到了二维实数空间中&#xff0c…

C# Maui 报错:程序“[15748] MauiApp1.exe”已退出,返回值为 2147942405 (0x80070005)

“MauiApp1.exe”(CoreCLR: DefaultDomain): 已加载“C:\Program Files\dotnet\shared\ Microsoft.NETCore.App\8.0.6\System.Private.CoreLib.dll”。 “MauiApp1.exe”(CoreCLR: clrhost): 已加载“E:\cDemo\MauiApp1\MauiApp1\bin\Debug\net8.0-windows10.0.19041.0\win10-x…

碳酸钠去除铁离子杂志树脂T-IRR

"高级"铁去除离子交换树脂介质 Tulsion T- IRR 是一款高级的离子交换树脂介质。设计了更好的多空性架构和卓越的催化性以去除溶解在地下水中的铁离子。 Tulsion T- IRR 具有氧化性能&#xff0c;可以把铁转化为3价铁离子。形成的不溶铁离子会被床体有效的拦截过滤&a…

LCD屏的价格和显示区的尺寸有关

LCD屏的价格和显示区的尺寸有关&#xff0c;和外尺寸无关。 下面通过12864点阵屏&#xff0c;对不同尺寸的屏&#xff0c;进行价格比较&#xff0c;就可以发现&#xff1a;LCD屏的价格和显示区的尺寸有关&#xff1b; 同点阵的屏&#xff0c;显示区域太小&#xff0c;显示12*1…

Python基础速成

文件操作 文件读取 with open语法 文件写入 注意事项 文件追加 异常、模块与包 捕获异常 捕获方法 捕获传递 模块的导入与自定义 定义 导入方式 自定义 测试模块 注意事项 python包 定义 操作 第三方包 定义 pip指令安装包

FlashSequence: SORA视频生成长序列任务训练解决方案

作者&#xff1a;黄奕桐、沈雯婷、艾宝乐、王昂、九丰 摘要 我们提出了长序列训练方案 FlashSequence 并集成在 PAI-TorchAcc &#xff08;阿里云机器学习平台开发的Pytorch上的大模型训练加速框架&#xff09;中&#xff0c;该方案能够支持SORA类超长序列模型的高效训练。在…

如何在小程序中实现页面之间的跳转

在小程序中实现页面之间的跳转&#xff0c;你可以使用上面提到的几个API。以下是具体的步骤和示例&#xff1a; 1. 使用 wx.navigateTo 跳转 wx.navigateTo 是小程序中常用的页面跳转API&#xff0c;用于保留当前页面&#xff0c;并跳转到应用内的某个页面。 示例&#xff1…

CAS Server Restful接口实现后台认证

背景 对于一些比较复杂定制化登录页的情况下&#xff0c;之前提到过可以自定义修改使用CAS Server提供的登录页这种操作已经明显跟不上复杂定制场景了&#xff0c;所以CAS Server也提供了支持Restful接口&#xff0c;支持服务端后台登陆&#xff0c;对于复杂登陆场景时&#x…

linux挂载window的目录

要在 CentOS 7 中挂载 Windows 的远程共享目录&#xff0c;操作的步骤&#xff1a; 安装 CIFS 工具&#xff1a; 首先&#xff0c;确保你的系统中安装了 cifs-utils 包&#xff0c;它提供了挂载CIFS/SMB文件系统的工具。 sudo yum install cifs-utils创建挂载点&#xff1a; 在…

无忧易售ERP - 助力您的沃尔玛平台刊登之旅

在跨境电商的广阔天地里&#xff0c;沃尔玛平台以其庞大的流量与高质量的顾客群体吸引了无数卖家的目光。但要想在这片蓝海中乘风破浪&#xff0c;高效、精准的产品刊登策略是关键。今天&#xff0c;我们将借助强大的无忧易售ERP系统&#xff0c;为您带来一站式沃尔玛平台产品刊…

threading.Timer()的用法

threading.Timer() 是 Python 中的一个线程模块&#xff0c;用于创建一个定时器线程。它可以在指定的延迟时间后执行一个指定的函数。下面是关于 threading.Timer() 的详细介绍&#xff1a; 语法&#xff1a; timer threading.Timer(interval, function, argsNone, kwargsNo…

何为屎山代码?

在编程界&#xff0c;有一种代码被称为"屎山代码"。这并非指某种编程语言或方法&#xff0c;而是对那些庞大而复杂的项目的一种形象称呼。屎山代码&#xff0c;也被称为"祖传代码"&#xff0c;是历史遗留问题&#xff0c;是前人留给我们的"宝藏"…