随想录二刷Day27——回溯

文章目录

  • 回溯
    • 7. 组合总和
    • 8. 组合总和 II

回溯

7. 组合总和

39. 组合总和

思路:
基本的递归回溯,只不过这里递归树每层的起始索引位置变成了 i ,而不是下一个元素的索引 i+1,因为可以重复选择。
复杂度: O ( n 2 n ) O(n2^n) O(n2n) 每个数字都有是否被选择两种可能 2 n 2^n 2n,递归树的最大深度是 target / min(candidates) n n n.

class Solution {
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<int> tmp;sort(candidates.begin(), candidates.end()); // 对 candidates 升序排列,方便后续剪枝backward(tmp, 0, candidates, target);return ans;}private:vector<vector<int>> ans;void backward(vector<int>& tmp, int start, vector<int>& candidates, int target) {if (target == 0) {ans.push_back(tmp);return ;}for (int i = start; i < candidates.size(); i++) {if (target < candidates[i]) break; // 剪枝tmp.push_back(candidates[i]);backward(tmp, i, candidates, target - candidates[i]);tmp.pop_back();}}
};

8. 组合总和 II

40. 组合总和 II

思路:
这一题上一题的区别是多了不能重复的限制。
如下图,我们可以看出,重复的是蓝色的同一层的部分,而在棕色的分支处的重复数字不会引起结果的重复。
所以剪枝只需要剪掉同一层相同元素搜索得到的答案。即用 if (i > start && candidates[i] == candidates[i - 1]) continue; 将蓝色部分进行剪枝。
在这里插入图片描述

class Solution {
public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<int> tmp;sort(candidates.begin(), candidates.end());backward(tmp, 0, candidates, target);return ans;}private:vector<vector<int>> ans;void backward(vector<int> &tmp, int start, vector<int>& candidates, int target) {if (target == 0) {ans.push_back(tmp);return ;}for (int i = start; i < candidates.size(); i++) {// 剪枝if (target < candidates[i]) break;// 去重if (i > start && candidates[i] == candidates[i - 1]) continue;tmp.push_back(candidates[i]);backward(tmp, i + 1, candidates, target - candidates[i]);tmp.pop_back();}}
};

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

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

相关文章

Docker容器间网络共享

Docker容器间网络共享 1、新建网络2、容器绑定网卡3、验证 Docker环境中为了一套应用部署多个环境、并且不修改配置文件的情况下&#xff0c;做到一键部署。要求不同容器直接的网络交互&#xff0c;使用容器名称。 网络相关常用命令 #查看网络内部信息docker network inspect b…

eclipse中设置自动补齐代码

eclipse中设置自动补齐代码 01 在window里找到preference 02 在preference里搜索content assist 03 在Java的content assist设置 设置为.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 04 apply and close即可

R文件详细介绍、瘦身

R 文件可能是很多 Android 开发者既熟悉又陌生的存在。它无处不在&#xff0c;所有使用到资源的地方都离不开它。它又有些陌生&#xff0c;google 已经把它封装的很完美了&#xff0c;以至于很多开发者并不知道它是怎么工作的。那么我们今天就来揭开它神秘的面纱。 R.id 这是一…

8.整数转换为浮点数【2023.11.30】

1.问题描述 整数转换为浮点数。 2.解决思路 使用input函数读取输入的整数 input_int int(input()) #将整数转换为浮点数类型 output_float float(input_int) 3.代码实现 numint(input("请输入一个整数")) num1float(num) print(num1)4.运行结果

GD32 定时器输入捕获模式测量PWM占空比和频率

简介 利用GD32 定时器的PWM输入捕获模式来实现PWM波形的占空比和频率的测量。相应的简介可以参考GD32用户手册中关于定时器输入捕获的章节&#xff0c;PWM输入捕获模式是输入捕获模式的一个特例。(记录自己学习过程&#xff0c;如有错误请留言指出) 原理 如何利用定时器测量…

VUE设计与实现共读系列之ref的实现【响应式原理】

前言 我们先顺一下vue使用响应式数据的流程&#xff1a; vue 是通过 ref 和 reactive 来创建响应式值&#xff0c;改变响应式值&#xff0c;视图跟着发生变化。 我们今天就来看一下ref和reactive是如何实现的 准备 首先&#xff0c;打开ref函数的位置 我们可以看到一个被re…

SmartSoftHelp8,SQL语句优化,耗时,返回数据行,kb

SQL语句优化 SQL语句耗时测试&#xff0c;耗时优化 SQL语句查询返回数据行统计 SQL语句查询返回数据大小统计&#xff0c;kb 总量统计 下载地址&#xff1a;https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888

施人玫瑰手留余香和影像组学、医学人工智能未来漫谈

今天收到进阶班学员的留言&#xff1a; 提示&#xff1a;本文有硬核软文嫌疑&#xff0c;请慎重阅读。“ 我用您给我们讲的CLEAR&#xff0c;与一个审稿人进行了battle。有理有据。评估下来&#xff0c;我感觉我们的文章还是挺符合CLEAR的。” 我从来不排斥在商言商&#xff0…

12月02日每日信息差

_灵感 &#x1f396; 六国入境免签首日2029人次享便利 &#x1f384; 国内首个超大规模“光伏气膜”项目在江苏投运 &#x1f30d; 东京将推出氢气交易市场 &#x1f30b; 中国疾控中心&#xff1a;建议尽早接种流感疫苗&#xff0c;尤其是老年人和儿童 &#x1f381; 偏高1.…

【Qt开发流程】之事件系统1:事件系统描述及键盘事件

Qt的事件系统 在Qt中&#xff0c;事件是对象&#xff0c;派生自抽象的QEvent类&#xff0c;它表示应用程序内部发生的事情或作为应用程序需要知道的外部活动的结果。事件可以由QObject子类的任何实例接收和处理&#xff0c;但它们与小部件特别相关。以下描述了在典型应用程序中…

基于ZLMediaKit的webrtc实时视频传输demo搭建

环境 ubuntu 20.04 ​ gcc version 9.4.0 ​ cmake version 3.16.3 部署ZLMediaKit流媒体服务器 安装openssl 首先可以检查一下自己的openssl的版本如果是1.1.1以上就可以忽略这一步 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar -xvzf openssl-1.1.1k…

酷开科技 | 酷开系统,让家庭娱乐方式焕然一新!

在这个快节奏的社会&#xff0c;家庭娱乐已成为我们日常生活中不可或缺的一部分&#xff0c;为了给家庭带来更多欢笑与感动&#xff0c;酷开科技发力研发出拥有丰富内容和技术的智能电视操作系统——酷开系统&#xff0c;它集合了电影、电视剧、综艺、游戏、音乐等海量内容&…

C语言-指针_01

指针基础 1. 概述 地址编号&#xff1a;计算机为了存储数据&#xff0c;每一个程序在 32位 机中 占4G&#xff0c;最小操作单位 是 一个字节&#xff0c;每一个字节都有其对应的地址&#xff0c;该地址就是 地址编号。 指针&#xff1a;地址编号这个数据 的 数据类型。 指针变…

TPC通信-BS架构

BS架构-基本原理 BS框架基本原理 使用线程池对BS架构进行优化

docker部署typecho博客

文章目录 1.安装git2.安装compose3.拉取仓库4.创建目录5.配置文件修改6.启动容器7.修改MYSQL数据库8.安装成功9.参考GitHub文档 1.安装git 安装git yum -y install git2.安装compose &#xff08;docker安装参考&#xff1a;docker基本知识&#xff09; 确保已经安装了 Doc…

爬虫学习-基础(HTTP原理)

目录 一、URL和URI 二、HTTP和HTTPS &#xff08;1&#xff09;HTTP &#xff08;2&#xff09;HTTPS &#xff08;3&#xff09;HTTP与HTTPS区别 &#xff08;4&#xff09;HTTPS对HTTP的改进&#xff1a;双问的身份认证 三、TCP协议 &#xff08;1&#xff09;TCP三次握手…

⭐ Unity 里让 Shader 动画在 Scene 面板被持续刷新

写 Unity Shader的时候&#xff0c;只有播放状态下的 Game 面板能看到Shader 顺畅的动态效果&#xff0c;不方便。 想要带有动态效果的 Shader 在 Scene 面板持续更新动画&#xff0c;只需要打开一个开关就能让 Scene 持续刷新动画了。 感谢大家的观看&#xff0c;您的点赞和关…

在oracle中的scn技术

SCN可以说是Oracle中一个很基础的部分&#xff0c;但同时它也是一个很重要的。它是系统中维持数据的一致性和顺序恢复的重要标志&#xff0c;是数据库非常重要的一种数据结构。 转载&#xff1a;深入剖析 - Oracle SCN机制详细解读 - 知乎 (zhihu.com)https://zhuanlan.zhihu.…

基于运算放大器的电压采集电路

一、运算放大器 运放推导的两个重要概念&#xff1a;虚短、虚断。 1、差分放大器 以差分放大器为例进行推导分析。 虚断–运放的"-“端、”“端的引脚电流接近为0&#xff1b; 根据基尔霍夫电流定律可知&#xff1a;iR1iRF&#xff0c;iR2iR3&#xff1b; iR1(Ui1-(V-…

C语言结构体详解(一)(能看懂文字就能明白系列)

&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;个人主页&#xff1a; 古德猫宁- &#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;…