算法第十三天-组合总和Ⅱ

news2024/11/15 12:52:04

组合总和Ⅱ

题目要求

解题思路

按顺序搜索,设置合理的变量,在搜索的过程中判断是否会出现重复集结果。重点理解对输入数组排序的作用和参考代码中 大剪枝和小剪枝 的意思

这道题域上一问的区别在于:

  • 第39题:candidates中的数字可以无限制重复被选取;
  • 第40题:candidates中的每个数字在每个组合中只能使用一次;

相同点在于:相同数字列表的不同排列被视为一个结果。

如何去掉重复的集合(重点)
为了使得解集不包含重复的组合。可以从以下两种方案思考:

  • 使用 hash 天然去重功能,但是编码相对复杂;
  • 使用和第39题和第15题相似的思路:不重复就不需要按顺序搜索,**在搜索过程中检测分支是否会出现重复结果。**注意:在这里的顺序不仅仅指数组candidates有序,还指按照一定顺序搜索结果。


由39题我们知道,数组candidates有序,也是DFS 过程中实现[剪枝]的前提。
将数组先排序的思路来自于这个问题:去掉一个数组中重复的元素。很容易想到的方案是:先对数组升序排列,重复的元素一定不是排好序以后相同的连续数组区域的第1个元素。也就是说,剪枝发生在:**同一层数值相同的节点第2,3,…个节点,因为数值相同的第1个节点已经搜索出了包含了这个数值的全部结果,**同一层的其他节点,候选数的个数更少,搜索出的结果一定不会比第1个节点更多,并且是第一个节点的子集。

代码

from typing import List
class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        def dfs(begin, path, residue):
            if residue == 0:
                res.append(path[:])
                return
            for index in range(begin, size):
                if candidates[index] > residue:
                    break
                if index > begin and candidates[index - 1] == candidates[index]:
                    continue
                path.append(candidates[index])
                dfs(index + 1, path, residue - candidates[index])
                path.pop()
        size = len(candidates)
        if size == 0:
            return []
        candidates.sort()
        res = []
        dfs(0, [], target)
        return res

复杂度分析

时间复杂度: O ( 2 n ∗ n ) O(2^n * n) O(2nn),其中n为candidates的长度。在大多数的递归+回溯的题目中我们无法给出一个严格的渐近界限,故这里只分析一个较为宽松的渐近上界。
空间复杂度: O ( n ) O(n) O(n)

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

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

相关文章

构建异地企业网络互联的高效路径

在当今数字化浪潮中,企业的业务拓展已不再受限于地理位置。为了在全球竞争中立于不败之地,越来越多的企业选择在不同城市设立分支机构,构建异地网络,实现高效的协同办公。本文将深入探讨在北上广等经济发达地区,如何通…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第二天-Linux开发板外设开发(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

PLC水箱液位控制、神经网络、PID模糊控制等Factory IO仿真

水箱液位控制的PLC仿真程序。TIA Portal V17 中的代码。该水箱在 Factory IO 3D 仿真软件中建模,将控制算法写入PLC,与Factory IO联合仿真进行实验。项目包括一个简单的自动化系统、一个带有两个泵的液罐和一个液位传感器。从 HMI 中,我们可以…

2024阿里云优惠_阿里云活动中心

2024年阿里云优惠活动大全,包括阿里云服务器优惠活动清单、配置价格表、域名优惠活动、阿里云建站活动、阿里云优惠代金券免费领取、对象存储OSS活动、企业邮箱优惠、无影云电脑优惠、CDN特惠等等,阿里云百科aliyunbaike.com分享2024阿里云优惠活动大全_…

Docker给容器添加新端口映射

Docker容器添加新端口映射 查看运行的容器 docker ps查看容器挂载目录 docker inspect [容器id]我这里是[容器name] 停止容器 docker stop pythonWarning: Stopping docker.service, but it can still be activated by: docker.socket 停止docker服务 systemctl stop dock…

el-table魔改样式出现BUG,表格内容区域出现滚动条

问题:el-table表格内容区域在高度自适应的情况下冒出滚动条 解决办法: 代码排查后发现时我设置了fixed:“xxx” 属性就会导致滚动条出现的问题,不设置则无。 [{ type: index, label: 序号, fixed: left },{ prop: enterprisesName, label: …

数据库的连接

连接数据库 我们使用WinR输入cmd打开运行窗口 输入:sqlplus并回车 输入用户名和密码,我用的是Scott,密码我自己设置的123456,Scott默认的密码是tiger,回车 这种情况表示登录成功 在连接Scott成功的情况下创建一些数据,在我的资源里面有个Oracle数据基础可以下载,直接复制粘…

09.简单工厂模式与工厂方法模式

道生一,一生二,二生三,三生万物。——《道德经》 最近小米新车亮相的消息可以说引起了不小的轰动,我们在感慨SU7充满土豪气息的保时捷设计的同时,也深深的被本土品牌的野心和干劲所鼓舞。 今天我们就接着这个背景&…

Debezium发布历史49

原文地址: https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. 使用发件箱模式进行可靠的微服务数…

JSP内置对象:forward动作标记和sendRedirect()方法实现页面跳转的区别

1.forward为服务器跳转,浏览器的地址栏不变; sendRedirect()为客户端跳转,浏览器的地址栏改变变新页面的URL。 2.执行到forward标记出现处停止当前JSP页面的继续执行,而转向标记中的page属性指定的页面&am…

【Matplotlib】基础设置之图像处理05

图像基础 导入相应的包: import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np %matplotlib inline导入图像 我们首先导入上面的图像,注意 matplotlib 默认只支持 PNG 格式的图像,我们可以使用 mpimg.im…

一文搞定JVM内存模型

鲁大猿,寻精品资料,帮你构建Java全栈知识体系 www.jiagoujishu.cn 运行时数据区 内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、…

56K star!一键拥有跨平台 ChatGPT 应用:ChatGPT-Next-Web

前言 现在围绕 openai 的客户端层出不穷,各路开发大神可以说是各出绝招,我也试用过几个国内外的不同客户端。 今天我们推荐的开源项目是目前我用过最好的ChatGPT应用,在GitHub超过56K Star的开源项目:ChatGPT-Next-Web。 ChatGP…

Java分布式锁理论(redis、zookeeper) 详解

目录 一、分布式锁有哪些应用场景? 二、分布式锁的实现方案 三、zookeeper实现分布式锁 一直不释放锁怎么办? 如何避免分布式锁羊群效应问题? 四、redis实现分布式锁 一、分布式锁有哪些应用场景? 1、定时任务 2、秒杀抢购…

XAgent调研

文章目录 1 简介2 快速测试 Quick Start3 结构分析 1 简介 XAgent(链接)是一个开源的,基于大语言模型的agent构建框架;其目标是构建出能够辅助人类处理各类任务的自动助手 定位:一个全能的,自动的辅助agen…

智邦国际ERP GetPersonalSealData.ashx接口存在SQL注入漏洞 附POC软件

@[toc] 智邦国际ERP GetPersonalSealData.ashx接口存在SQL注入漏洞 附POC软件 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

【普中开发板】基于51单片机的温度报警器LCD1602_可调上下限( proteus仿真+程序+设计报告+讲解视频)

基于51单片机的温度报警器LCD1602_可调上下限 1.主要功能:资料下载链接: 普中开发板实物演示图:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单 【普中】基于51单片机的温度报警器LCD1602_可调上下限 ( proteus仿真程序设计报告讲解视频&a…

安全基础~信息搜集3

文章目录 知识补充APP信息搜集php开发学习理解漏洞 知识补充 端口渗透总结 python Crypto报错:https://blog.csdn.net/five3/article/details/86160683 APP信息搜集 1. AppInfoScanner 移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具 使用教程 演示&…

LCD—液晶显示

本节主要介绍以下内容 显示器简介 液晶控制原理 秉火3.2寸液晶屏简介 使用FSMC模拟8080时序 NOR FLASH时序结构体 FSMC初始化结构体 一、显示器简介 显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。…

用通俗易懂的方式讲解:使用 Mistral-7B 和 Langchain 搭建基于PDF文件的聊天机器人

在本文中,使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序,可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few…