代码随想录Day29

Day 29 回溯算法part05

今日任务

  • 491.递增子序列
  • 46.全排列
  • 47.全排列 II

代码实现

491.递增子序列

 public List<List<Integer>> findSubsequences(int[] nums) {List<List<Integer>> result = new ArrayList<>();List<Integer> path = new ArrayList<>();backtracking(nums, 0, path, result);return result;}void backtracking(int[] nums, int startIndex, List<Integer> path, List<List<Integer>> result) {if (path.size() > 1) {result.add(new ArrayList<>(path));}HashSet<Integer> set = new HashSet<>();for (int i = startIndex; i < nums.length; i++) {if ((path.size() > 0 && nums[i] < path.get(path.size() - 1)) || set.contains(nums[i])) {continue;}set.add(nums[i]);path.add(nums[i]);backtracking(nums, i + 1, path, result);path.remove(path.size() - 1);}}

46.全排列
这里我没有用标记已使用的方法,而是用path.contains判断,结果到下一道题就行不通了

 public List<List<Integer>> permute(int[] nums) {List<List<Integer>> result = new ArrayList<>();List<Integer> path = new ArrayList<>();backtracking(nums, path, result);return result;}void backtracking(int[] nums, List<Integer> path, List<List<Integer>> result) {if (path.size() == nums.length) {result.add(new ArrayList<>(path));return;}for (int num : nums) {if (path.contains(num)) {continue;}path.add(num);backtracking(nums, path, result);path.remove(path.size() - 1);}}

47.全排列 II
重点在于如何去重,可以通过排序+used数组去重

 public List<List<Integer>> permuteUnique(int[] nums) {List<List<Integer>> result = new ArrayList<>();List<Integer> path = new ArrayList<>();boolean[] used = new boolean[nums.length];backtracking1(nums, path, result, used);return result;}void backtracking1(int[] nums, List<Integer> path, List<List<Integer>> result, boolean[] used) {if (path.size() == nums.length) {result.add(new ArrayList<>(path));return;}HashSet<Integer> set = new HashSet<>();for (int i = 0; i < nums.length; i++) {if (used[i] || set.contains(nums[i])) {continue;}set.add(nums[i]);used[i] = true;path.add(nums[i]);backtracking1(nums, path, result, used);path.remove(path.size() - 1);used[i] = false;}}

今日总结

  1. 这里有两种去重方式,一种是通过used数组去重,这种方法的关键是数组需要排序,还有一种是在for循环中用一个set去重;去重的关键是要分清树枝去重和树层去重,for循环代表一层,递归代表往下;
  2. 因为有公式的存在,很多题其实想不太明白,只是套公式,然后根据用例通不过的地方去修改,就解决了,而对于回溯本身想的不是很清楚,递归本身也比较抽象;
  3. 今天小绿,又追高了,真是愚蠢
  4. 另外,听说最近工作不好找,我还是得试试啊。

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

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

相关文章

Python爬虫入门:HTTP与URL基础解析及简单示例实践

在数字化时代&#xff0c;数据已成为一种宝贵的资源。Python作为一种强大的编程语言&#xff0c;在数据采集和处理方面表现出色。爬虫技术&#xff0c;即网络爬虫&#xff0c;是Python中用于数据采集的重要工具。本文作为Python爬虫基础教程的第一篇&#xff0c;将深入讲解URL和…

流畅的 Python 第二版(GPT 重译)(六)

第三部分&#xff1a;类和协议 第十一章&#xff1a;一个 Python 风格的对象 使库或框架成为 Pythonic 是为了让 Python 程序员尽可能轻松和自然地学会如何执行任务。 Python 和 JavaScript 框架的创造者 Martijn Faassen。 由于 Python 数据模型&#xff0c;您定义的类型可以…

CSS3新属性(学习笔记)

一、. 圆角 border-radius:; 可以取1-4个值&#xff08;规则同margin&#xff09; 可以取px和% 一般用像素&#xff0c;画圆的时候用百分比&#xff1a;border-radius:50%; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&q…

【鸿蒙HarmonyOS开发笔记】通知模块之发布进度条类型通知

概述 进度条通知也是常见的通知类型&#xff0c;主要应用于文件下载、事务处理进度显示。HarmonyOS提供了进度条模板&#xff0c;发布通知应用设置好进度条模板的属性值&#xff0c;如模板名、模板数据&#xff0c;通过通知子系统发送到通知栏显示。 目前系统模板仅支持进度条…

Svg Flow Editor 原生svg流程图编辑器(三)

系列文章 Svg Flow Editor 原生svg流程图编辑器&#xff08;一&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;二&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;三&#xff09; 实现对齐辅助线 在 logicFlow 中&#xff0c;辅助线的实现是通…

【网页实战项目设计】基于SSM的高校二手交易平台 (大学跳蚤市场)(源码+LW文档)

基于SSM的高校二手交易平台 &#xff08;大学跳蚤市场&#xff09; 项目截图 系统功能界面图 用户注册、用户登录界面图 个人中心界面图 商品信息界面图 商品上架管理界面图 订单信息管理界面图 开发环境与技术框架 开发语言&#xff1a;Java 框架&#…

WordPress菜单函数wp_nav_menu各参数

wordpress主题制作时&#xff0c;常常会在不同的位置调用不同的菜单&#xff0c;使用下面的这个代码&#xff0c;再加上CSS给菜单做新的样式&#xff0c;可满足wordpress模板制作时对菜单调用的所有需求。 wp_nav_menu( array( theme_location > ,//导航别名 menu > , /…

SV-7035VP播放模块通用型播放终端SV-7035VP-SIP 网络通用型播放功放模块

SV-7035VP播放模块通用型播放终端SV-7035VP-SIP 网络通用型播放功放模块 产品介绍 SV-7035VP模块是一款SIP播放模块&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数据&#xff0c;提供立体声的音频输出。 本SIP播放模块带有一个继电器端子和一个NET接口&a…

RabbitMQ-同步和异步区别快速入门

文章目录 1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯 1.2.技术对比&#xff1a; 2.快速入门2.1.安装RabbitMQ2.2.RabbitMQ消息模型2.3.入门案例2.3.1.publisher实现 1.1.同步和异步通讯 服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&am…

Simulink如何自动保存模型,解决崩溃问题

文章目录 Simulink如何自动保存模型,解决崩溃问题自动保存模型脚本脚本使用方法专题目录 Simulink如何自动保存模型,解决崩溃问题 自动保存模型脚本 在使用sumilink建模中,暂无自动保存模型的相关设置,使用中常常会遇到软件卡死奔溃现象 当出现如上提示,如果花费了半天建…

在抖音电商迎上新趋势,他们找到春季服饰生意新增量

冬去春来&#xff0c;万物焕新。每年春天换季的时候&#xff0c;都是大家买新衣服的高峰期。 对于服饰商家来说&#xff0c;季节性的平台活动&#xff0c;能够带来较大的消费需求扩容空间&#xff0c;也是推动生意增长的好时机。在3月9日-3月14日举办的「抖音商城服饰焕新周」…

【Jax报错】CUDA backend failed to initialize: Unable to load cuPTI

如题&#xff0c;在本地跑xai的grok-1的时候遇见的问题。 首先你的cuda应该是安装好的&#xff0c;也就是bash下nvidia-smi可以显示、python下torch.cuda.is_available()返回True。 在执行 import jaxjax.local_device_count()的时候报错这个。 在/usr/local/cuda/extras/C…

FreeCAD傻瓜教程之创建参数化几何图形-螺旋体、平面、球体、椭球体、圆柱体、圆锥体、棱柱、椭圆

目的&#xff1a;学会用FreeCAD绘制参数化的几何图形。 一、使用的工作台和工具 1.1选择Part 工作台 1.2单击创建图元...工具 也就是上图黄色工具区域的倒数第2个 1.3 打开几何图元 下方的下拉列表 二、绘制螺旋体、弹簧、螺丝杆 2.1 选择几何图元列表中的 “螺旋体” 设…

【PostgreSQL的指标采集工具--pgmetrics】

pgmetrics是用go语言写的一款PostgreSQL的健康监控指标采集软件。可以连接到数据库&#xff0c;获取当前数据库的相关信息&#xff0c;如果连接的是本地数据库&#xff0c;则同时会采集服务器的状态信息。可以把采集的结果以json或者text或者csv的形式存储。 1.下载pgmetrics的…

Mysql主从之keepalive+MySQL高可用

一、Keepalived概述 keepalived 是集群管理中保证集群高可用的一个服务软件&#xff0c;用来防止单点故障。 keepalived 是以VRRP 协议为实现基础的&#xff0c;VRRP 全称VirtualRouter Redundancy Protocol&#xff0c;即虚拟路由冗余协议。虚拟路由冗余协议&#xff0c;可以…

计算机网络题,网上的记录下,计算题

1.8 级信号级别方案被用在一个 10 MHz频率波段中发送信息&#xff0c;数据传输最大比特率是多少&#xff1f;不考虑噪声。 8级信号需三个比特位&#xff0c;根据奈奎斯特准则&#xff0c;10MHz频段对应最大的波特率为20MBauds。最大比特率为20Mlog(2)860Mbps. 2.北美和日本主要…

关于: .sync修饰符

.sync修饰符用于简化父组件与子组件之间双向绑定的语法。通过使用.sync修饰符&#xff0c;可以将子组件中对父组件属性的修改直接同步到父组件中&#xff0c;而无需显式地在子组件中触发事件来更新父组件的属性。.sync修饰符的作用是使双向绑定在父子组件之间更加直观和简洁。 …

武汉星起航领航中国跨境电商,助推全球贸易新篇章

在全球经济一体化的浪潮中&#xff0c;跨境电商以其独特的优势成为推动国际贸易增长的重要引擎。作为中国跨境电商行业的领军者&#xff0c;武汉星起航电子商务有限公司以其卓越的能力和经验&#xff0c;正积极推动中国跨境电商走向世界&#xff0c;书写全球贸易的新篇章。 自…

C#与三菱PLC网络模块通讯

一、操作 1.1 打开以太网模块 参数——网络参数——以太网 1.2 设置以太网模块 运行设置配置IP&#xff0c;打开设置配置端口号 1.3 设置端口号 上位机C#与PLC通讯&#xff0c;打开方式:Unpassive&#xff0c;固定缓冲:发送 二、打开方式说明 2.1 Active PLC主动连接&#xff0…