代码随想录算法训练营 Day29 回溯算法5

Day29 回溯算法5

491.递增子序列

思路

跟上一题类似,需要去重
但问题是该题要求递增子序列,因此不能在一开始将数组排序,不知道这种情况如何去重

根据代码随想录
要点:

  1. 本题不可以对数组进行排序
  2. 对于每一层使用uset记录取过的数,如果下一个数在uset中存在,则continue
  3. uset不需要回溯,因为它只记录该层取过的元素,每层重新定义uset

最终代码:

class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:path = []result = []used = [False] * len(nums)self.backtracking(nums, 0, path, result)return resultdef backtracking(self, nums, startIndex, path, result):if len(path) > 1:result.append(path[:])uset =set()for i in range(startIndex, len(nums)):if (path and nums[i] < path[-1]) or nums[i] in uset:continueuset.add(nums[i])path.append(nums[i])self.backtracking(nums, i + 1, path, result)path.pop()

Python 方法

set()函数:
创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

46.全排列

思路

排列不需要startIndex向后取元素
但是不知道如何表示某个元素已经取过了
可以在nums中删除去过的元素,但是怕对后面有影响

根据代码随想录
要点:

  1. 使用used数组标记使用过的元素

尝试写代码

class Solution:def permute(self, nums: List[int]) -> List[List[int]]:path = []result = []used = [False] * len(nums)self.backtracking(nums, used, path, result)return resultdef backtracking(self, nums, used, path, result):if len(path) == len(nums):result.append(path[:])returnfor i in range(len(nums)):if used[i]:continueused[i] = Truepath.append(nums[i])self.backtracking(nums, used, path, result)path.pop()used[i] = False

成功通过!

47.全排列 II

思路

与上一题相比,需要去重
去重的逻辑也是通过used数组确定

尝试写代码:

class Solution:def permuteUnique(self, nums: List[int]) -> List[List[int]]:path = []result = []used = [False] * len(nums)self.backtracking(nums, used, path, result)return resultdef backtracking(self, nums, used, path, result):if len(path) == len(nums):result.append(path[:])returnfor i in range(len(nums)):if i > 0 and nums[i] == nums[i - 1] and not used[i - 1]:continueif used[i]:continuepath.append(nums[i])used[i] = Trueself.backtracking(nums, used, path, result)path.pop()used[i] = False

测试用例通过,但结果不对

根据代码随想录
注意:
该方法需要先讲nums数组排序,因为每次是判断nums[i]和nums[i - 1]是否相等

最终代码:

class Solution:def permuteUnique(self, nums: List[int]) -> List[List[int]]:nums.sort()path = []result = []used = [False] * len(nums)self.backtracking(nums, used, path, result)return resultdef backtracking(self, nums, used, path, result):if len(path) == len(nums):result.append(path[:])returnfor i in range(len(nums)):if i > 0 and nums[i] == nums[i - 1] and not used[i - 1]:continueif used[i]:continuepath.append(nums[i])used[i] = Trueself.backtracking(nums, used, path, result)path.pop()used[i] = False

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

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

相关文章

RISC-V特权架构 - 中断定义

RISC-V特权架构 - 中断定义 1 中断类型1.1 外部中断1.2 计时器中断1.3 软件中断1.4 调试中断 2 中断屏蔽3 中断等待4 中断优先级与仲裁5 中断嵌套6 异常相关寄存器 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 中断类型 RISC-V 架构定义的中…

idea打开文件乱码,设置编码

idea整个项目都设置了utf-8了&#xff0c;但是还是有一个文件是其他编码_(ཀ」 ∠)__ 。 配置项目编码 在设置中设置编码 配置具体目录的编码 上面的设置之后&#xff0c;还是有几个文件一直是乱码&#xff0c;需要单独配置。 偶尔引入的依赖中的文件也会乱码&#xff0c;需…

题目:摆花(蓝桥OJ 0389)

问题描述&#xff1a; 题解&#xff1a; #include <bits/stdc.h> using namespace std; using ll long long; const int N 105; const ll p 1e6 7; ll a[N], dp[N][N];int main() {int n, m; cin >> n >> m;for(int i 1; i < n; i)cin >> a[i…

JVM内存 垃圾收集器

JVM&#xff08;Java虚拟机&#xff09;内存管理和垃圾收集器是Java编程中非常重要的概念。JVM内存主要划分为几个不同的区域&#xff0c;每个区域都有其特定的用途。而垃圾收集器则是负责自动管理这些内存区域&#xff0c;回收不再使用的对象&#xff0c;以释放内存。 首先&a…

什么是双亲委派机制,如何打破双亲委派

了解双亲委派前&#xff0c;我们需要先了解下类加载器。 什么是类加载器呢 在Java中&#xff0c;类加载器&#xff08;ClassLoader&#xff09;负责将类文件加载到Java虚拟机中&#xff0c;并生成对应的 Class 对象。类加载器的分类和对应的作用如下&#xff1a; 启动类加载器…

【科研基础】VAE: Auto-encoding Variational Bayes

[1]Kingma, Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprint arXiv:1312.6114 (2013). [2] [论文简析]VAE: Auto-encoding Variational Bayes[1312.6114] [3] The Reparameterization Trick [4] 变分法的基本原理是什么? 文章目录 1-…

我的编程之路:从非计算机专业到Java开发工程师的成长之路 | 学习路线 | Java | 零基础 | 学习资源 | 自学

小伙伴们好&#xff0c;我是「 行走的程序喵」&#xff0c;感谢您阅读本文&#xff0c;欢迎三连~ &#x1f63b; 【Java基础】专栏&#xff0c;Java基础知识全面详解&#xff1a;&#x1f449;点击直达 &#x1f431; 【Mybatis框架】专栏&#xff0c;入门到基于XML的配置、以…

【服务器】常见服务器高危端口

常见的服务器高危端口信息 端口号协议描述21FTP用于文件传输协议 (FTP)&#xff0c;用于在客户端和服务器之间传输文件。FTP 的安全性较低&#xff0c;容易受到中间人攻击。22SSH用于安全外壳协议 (SSH)&#xff0c;用于通过加密的连接远程管理服务器。尽管 SSH 是加密的&…

负荷频率控制LFC,自抗扰ADRC控制,麻雀SSA算法优化自抗扰参数,两区域二次调频simulink/matlab

红色曲线为优化结果&#xff0c;蓝色曲线为没有自抗扰和没有优化的结果&#xff01;

【ansible】Failed to connect to the host via ssh Permission denied

故障现象 yeqiangyeqiang-MS-7B23:/data/VirtualBox VMs$ ansible all -m pingnode-2 | UNREACHABLE! > { "changed": false, "msg": "Failed to connect to the host via ssh: \nAuthorized users only. All activities may be monitore…

基于springboot实现蜗牛兼职网平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现蜗牛兼职网平台系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;蜗牛兼职网当然也不能排除在外。蜗牛兼职网是以实际运用为开发背景&#xff…

【C语言】多文件编程以及static关键字

1、多文件编程 把函数声明放在头文件xxx.h中&#xff0c;在主函数中包含相应头文件在头文件对应的xxx.c中实现xxx.h声明的函数 a、主文件 #include<stdio.h> #include "MyMain.h"//需要包含头文件&#xff0c;头文件包含我们自定义的函数int main(){int num…

6、鸿蒙学习-Stage模型应用程序包结构

基于Stage模型开发的应用&#xff0c;经编译打包后&#xff0c;其应用程序的结构如下图应用程序包结构&#xff08;Stage模型&#xff09;所示。开发者需要熟悉应用程序包结构相关的基本概念。 一、在开发态&#xff0c;一个应用包含一个或者多个Module&#xff0c;可以在DevE…

【管理咨询宝藏60】顶级咨询公司对医药行业的研究报告

【管理咨询宝藏60】顶级咨询公司对医药行业的研究报告 【格式】PDF 【关键词】医疗行业、战略咨询、行业洞察 【核心观点】 - 195页精品内容&#xff0c;让你彻底透视医疗行业的发展现状和未来趋势 - 前20大交易约占医疗交易总额的65%&#xff1b;医疗行业大部分为制药业投资交…

面向对象编程(一)

面向对象编程&#xff08;一&#xff09; 面向过程&面向对象 面向过程思想 1. 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么......2. 面对过程适合处理一些较为简单的问题面向对象思想 物以类聚&#xff0c;分类的思维模式&#xff0c;思考问题…

住宅IP是什么?与机房IP有哪些区别?

随着互联网的普及和发展&#xff0c;不同类型的IP地址在网络世界中扮演着重要角色。在网络架构中&#xff0c;机房IP和住宅IP是两种常见的IP类型&#xff0c;它们各有优劣&#xff0c;适用于不同的场景和需求。本文将对机房IP和住宅IP进行技术对比&#xff0c;并给出选择合适IP…

c++的学习之路:5、类和对象(1)

一、面向对象和面向过程 在说这个定义时&#xff0c;我就拿c语言举例&#xff0c;在c语言写程序的时候&#xff0c;基本上就是缺什么函数&#xff0c;就去手搓一个函数&#xff0c;写的程序也只是调用函数的&#xff0c;而c就是基于面向对象的开发&#xff0c;他关注的不再是单…

DFS算法(C/C++)(内含立例题)

DFS&#xff1a; DFS又称深度优先搜索&#xff0c;是一种图运算方法&#xff0c;它从第一个节点走起&#xff0c;一直往下走&#xff0c;一直走到不能继续再走&#xff0c;就返回上一个节点&#xff0c;继续搜索其他地方&#xff0c;直到找到目标节点为止。 DFS可以解决迷宫问…

每日一题 --- 有效的字母异位词[力扣][Go]

有效的字母异位词 题目&#xff1a;242. 有效的字母异位词 给定两个字符串 *s* 和 *t* &#xff0c;编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 **注意&#xff1a;**若 *s* 和 *t* 中每个字符出现的次数都相同&#xff0c;则称 *s* 和 *t* 互为字母异位词。 示例 …

石膏像的形态和比例关系

石膏像的形态与比例关系简述 石膏像是艺术领域中常见的一种雕塑形式&#xff0c;其通过细腻的石膏材质展现出人物的形态美感和比例关系。 头部基本形态 石膏像的头部形态是塑造人物特征的基础。通常情况下&#xff0c;头部呈椭圆形&#xff0c;额部宽而饱满&#xff0c;下颌逐…