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 …

安装golang

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

线性代数|机器学习-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…

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类超长序列模型的高效训练。在…

CAS Server Restful接口实现后台认证

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

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

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

何为屎山代码?

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

【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用

&#x1f525; 个人主页&#xff1a;空白诗 &#x1f525; 热门专栏&#xff1a;【Go语言精进之路】 文章目录 引言一、什么是map1.1 map的基本概念与特性1.2 map的初始化与零值问题1.3 map作为引用类型的行为 二、map的基本操作2.1 插入数据2.2 获取数据个数2.3 查找和数据读取…

前端开发部署:Visual Studio Code + vue

〇 说明 本教程全部采用默认安装路径&#xff0c;因为在进行自定义路径安装的时候&#xff0c;需要配置各种环境变量&#xff0c;在这个配置过程中&#xff0c;可能出现各种很混乱的问题。 一 安装Node.js 1 下载https://nodejs.org/en 2 按照默认NEXT执行 C:\Program Files…

文件传输系统主要用于哪些场景?要如何选型?

文件传输系统是一种用于在不同设备、网络或地理位置之间传输文件的产品解决方案&#xff0c;在各行各业中的应用还是很广泛的。 文件传输系统可以应用于多种场景&#xff0c;主要包括&#xff1a; 1、企业内部文件共享&#xff1a;在公司内部不同部门或团队之间共享文件&#…

9、编写业务逻辑

9、编写业务逻辑 9.1 编写博客接口(新增和查询一起编写了) 响应实体:(随便封装的,可以根据自己的想法封装) // entity/Response package com.example.fullstackblogback.commen;import lombok.Data;import java.util.List;@Data public class Response<T> {pri…

[经验] 梦见自己游泳是什么意思 周公解梦 #职场发展#微信#媒体

梦见自己游泳是什么意思 周公解梦 1、梦见自己游泳 梦见自己游泳是一种非常常见的梦境&#xff0c;而这个梦境通常代表着我们内心深处的渴望和憧憬。 游泳是一项需要技巧和勇气的运动&#xff0c;它需要我们在水中保持平衡和控制自己的呼吸。因此&#xff0c;梦见自己游泳通常…

代码随想录算法训练营第三十五天| 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

LeetCode 1005.K次取反后最大化的数组和 题目链接&#xff1a;https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/ 文章链接&#xff1a;https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%9…