【代码随想录算法训练Day29】LeetCode 491.非递减子序列、LeetCode 46.全排列、LeetCode 47.全排列II

Day29 回溯第五天

LeetCode 491.非递减子序列

这道题比起子集II来说又多了要考虑的点,首先我们不能排序来去重了,因为这样会增加很多不合题意的递增序列。所以我们使用set来去重。同时还要注意题目对答案子集要求内部元素的数量要大于1。
这个代码有一个精髓:set是在回溯内部建立的,也就是说他会每次遍历都创建一个新的set,自动完成全新回溯操作的去重工作,所以不需要专门在递归后对set进行回溯了。

class Solution {
public:vector<int> path;vector<vector<int>> res;void backtrack(vector<int>& nums,int startIndex){if(path.size()>1) res.push_back(path);unordered_set<int> uset;for(int i=startIndex;i<nums.size();i++){if((!path.empty() && nums[i]<path.back()) || uset.find(nums[i])!=uset.end())continue;uset.insert(nums[i]);path.push_back(nums[i]);backtrack(nums,i+1);path.pop_back();}}vector<vector<int>> findSubsequences(vector<int>& nums) {backtrack(nums,0);return res;}
};

LeetCode 46.全排列

全排列比起前面的就简单一些了,我们甚至不需要向后遍历,只需要用一个数组确认是否遍历过,然后不断从头开始递归即可。

class Solution {
public:vector<int> path;vector<vector<int>> res;void backtrack(vector<int>& nums,vector<bool>& used){if(path.size()==nums.size()){res.push_back(path);return;} for(int i=0;i<nums.size();i++){if(used[i]==true) continue;used[i]=true;path.push_back(nums[i]);backtrack(nums,used);path.pop_back();used[i]=false;}}vector<vector<int>> permute(vector<int>& nums) {vector<bool> used(nums.size(),false);backtrack(nums,used);return res;}
};

LeetCode 47.全排列II

与前一题相比,增加了一个去重的过程,这也是之前的题目里出现过的。

class Solution {
public:vector<int> path;vector<vector<int>> res;void backtrack(vector<int>& nums,vector<bool>& used){if(path.size()==nums.size()){res.push_back(path);return;}for(int i=0;i<nums.size();i++){if(i>0 && nums[i]==nums[i-1] && used[i-1]==false)continue;if(used[i]==false){used[i]=true;path.push_back(nums[i]);backtrack(nums,used);path.pop_back();used[i]=false;}}}vector<vector<int>> permuteUnique(vector<int>& nums) {sort(nums.begin(),nums.end());vector<bool> used(nums.size(),false);backtrack(nums,used);return res;}
};

今天是排列,加油!

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

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

相关文章

二分搜索树深度优先遍历

二分搜索树深度优先遍历 二分搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;是一种特殊的二叉树&#xff0c;它具有以下特性&#xff1a;对于树中的任意节点&#xff0c;其左子树中的所有元素都小于该节点的值&#xff0c;其右子树中的所有元素都大于该…

`combineLatest` 和 `zip` 都是 RxJava 中用来组合多个流的操作符,但它们在行为和使用场景上有一些显著的区别。

combineLatest 和 zip 都是 RxJava 中用来组合多个流的操作符&#xff0c;但它们在行为和使用场景上有一些显著的区别。 combineLatest combineLatest 操作符会在每个源 Flowable 发出一项数据后&#xff0c;合并最新发出的数据项&#xff0c;并且每当任意一个源 Flowable 发…

C++STL---list知识汇总

前言 学习完list&#xff0c;我们会对STL中的迭代器有进一步的认识。list底层有很多经典的东西&#xff0c;尤其是他的迭代器。而list的结构是一个带头双向循环链表。 list没有reserve和resize&#xff0c;因为它底层不是连续的空间&#xff0c;它是用时随时申请&#xff0c;…

windows 系统中部署 windows_exporter

从 github 中下载安装包到本地路径&#xff1a; Releases prometheus-community/windows_exporter (github.com) 后台运行方式windows_exporter&#xff0c;进入命令提示符执行以下命令&#xff1a; > powershell -Command "Start-Process D:\windows_exporter\wind…

快排与归并的算法(非递归版)

一.快排 1.递归法(方法多样) 1>hoare版 注&#xff1a;该方法小编已经在上篇博客中介绍过了&#xff0c;就不在这里过多赘述了&#xff0c;如果有兴趣的小伙伴可以看看小编的上篇博客哦 2>挖坑法 1&#xff09;方法介绍&#xff1a;定义最左边的数据为key&#xff0…

GLM-4本地部署的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

vue3 【实战】封装 “心跳“ 组件

需求描述 在控制台每秒打印一个“hello” 代码实现 <script setup> import { onMounted, onBeforeUnmount, ref } from "vue";const timer ref(0);onMounted(() > {function fn() {console.log("hello");timer.value setTimeout(fn, 1000);}tim…

Java面试题:Redis双写一致性问题

Redis双写一致性 缓存和数据库数据同步 正常流程: 读操作: 查询缓存,查询命中直接返回,没命中查询数据库将查询到的数据写入缓存,并设定超时时间 写操作: 删除缓存,修改数据库,在延时一段时间后再删除缓存 (延迟双删)延迟:等待数据库的主节点同步到从节点 因为如果先删…

QT: 读写ini配置文件(实现qml界面登录,修改)

目录 一.功能介绍 二.暴露属性 三.指定INI文件的路径和格式。 四.登录操作 1.检查INI文件中是否含有登录信息&#xff1b; 2.读取存储的ID&#xff1b; 3.读取存储的密码; 4.成功返回1&#xff1b;失败返回2&#xff1b; 五.修改账号 1.检查INI文件中是否含有登录信…

Java实现一个公共方法解析不同类型的表格

首先是公共方法 private String getCellValueAsString(Cell cell) {if (cell null) {return "";}String value "";switch (cell.getCellType()) {case STRING:value cell.getStringCellValue();break;case NUMERIC:if (DateUtil.isCellDateFormatted(ce…

九天毕昇深度学习平台 | 升级python版本3.8/配置ipynb内核

下载3.8版本 https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz 解压 !tar -xvf Python-3.8.18.tgz 在终端配置 ./configure # (可选 --prefix/usr/local/python3.8.18&#xff09; make sudo make install 不指定 --prefix 时&#xff0c;configure 会将可执…

总结一下自己,最近三年,我做了哪些工作

简单总结下吧&#xff0c;我算是业务架构师&#xff0c;确实对得起这个名字&#xff0c;经常冲在一线&#xff0c;业务和架构相关的东西都有做&#xff0c;系统比较复杂&#xff0c;不过逐步了解谁都会熟悉的 下面简单列一列我这三年的工作情况吧&#xff0c;也算是给自己一个交…

webshell工具流量特征

一、蚁剑&#xff08;PHP用base64加密&#xff09; 将蚁剑的正文内容进行URL解码后&#xff0c;流量最中明显的特征为ini_set("display_errors","0");这段代码基本是所有WebShell客户端链接PHP类WebShell都有的一种代码&#xff0c;但是有的客户端会将这段…

JavaScript Promise

JavaScript Promise是一种用于处理异步操作的内置对象。它提供了一种更加优雅、可读性更高的方法来处理多个异步操作的结果。 下面是一个例子&#xff0c;演示了如何使用Promise来处理异步操作&#xff1a; function fetchData(url) {return new Promise(function(resolve, r…

实操:serverless-step-functions-local

目录 问题 依赖组件 调用流程 代码设置 1、安装依赖插件&#xff1a; 2、serverless.yml配置&#xff0c;我这里只提供stepfunction依赖的配置 3、业务代码中使用本地stepfunction 4、启动serverless offline 5、docker 安装启动stepfunction ⚠️注意 1、docker访问…

【Linux系统查看显卡支持的OpenGL版本】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、安装依赖项二、Linux系统查看显卡支持的OpenGL版本 一、安装依赖项 sudo apt-get update && sudo apt-get install mesa-utils二、Linux系统查看显卡支…

【Linux】进程(6):环境变量

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解Linux进程&#xff08;6&#xff09;&#xff1a;环境变量&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 &#xff08;A&#xff09;PATH方法1&#…

水经微图安卓版5.3.0发布

随时随地&#xff0c;微图一下&#xff01; 水经微图&#xff08;以下简称“微图”&#xff09;安卓版&#xff0c;新版已上线。 当前版本 当前版本号为&#xff1a;5.3.0-beta 如果你发现该版本中存在问题&#xff0c;请及时反馈给我们修订。 关于我们产品的版本控制&…

扫描外设广播详解

文章目录 扫描外设广播详解一、接口说明二、Options说明1、CBCentralManagerScanOptionAllowDuplicatesKey2、CBCentralManagerScanOptionSolicitedServiceUUIDsKey 扫描外设广播详解 一、接口说明 /*!* method scanForPeripheralsWithServices:options:** param serviceUU…

【面向就业的Liux基础】从入门到熟练,探索Linux的秘密(一)

主要帮助大家面向工作过程中Linux系统常用的命令联系&#xff0c;采用极致的实用主义&#xff0c;帮助大家节省时间。 文章目录 前言 一、linux系统 二、linux系统基本命令 1.Linux系统的目录结构 2. 常用命令介绍 3.命令演示 4.作业练习 总结 前言 主要帮助大家面向工作过程中…