《代码随想录》Day25打卡!

《代码随想录》回溯算法:递增子序列

本题的完整题目如下:

image.png

本题的完整思路如下: 1.本题使用递归和回溯来求解,所以分为三部: 2.第一步:确定递归函数的返回值和参数:返回值无,参数为原数组和遍历开始索引startindex。 3.第二步:确定递归函数终止条件:本题与前边的题不一样,收割结果的条件与递归终止的条件不是同时发生了,所以要先收割结果,再返回。返回条件依然是startindex>=原数组长度。其实这道题不需要终止条件也可以,因为for循环结束时,该递归函数也就结束了。 3.第三步:确定单次递归函数中的逻辑:由于原数组中存在相同元素,所以需要去重,但是本题由于结果与原数组中的顺序有关,所以不能对原数组进行排序然后去重,所以本题去重是难点!在每一层遍历时,创建一个新的哈希集合used,每次遍历一个元素时,就将该元素添加到used集合中。在每次遍历时,判断当前元素在used集合中是否存在,如果存在,就不进行下边的递归与回溯。除此之外,还需要判断当前元素是否满足题里的要求:递增序列,即判断当前元素是否大于等于前一个元素,如果不满足,就continue。如果以上条件都满足,就进行递归和回溯。** 4.本题去重步骤是关键,一种全新的去重方法。 以下是本题的完整代码:

//491.非递减子序列
class Solution10 {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> findSubsequences(int[] nums) {
​backtrack(nums, 0);return res;}
​public void backtrack(int[] nums, int startindex) {if(path.size() >= 2) {res.add(new ArrayList<>(path));}
​if(startindex >= nums.length) {return;}
​HashSet<Integer> used = new HashSet<>();
​for(int i = startindex; i < nums.length; i++) {if(!path.isEmpty() && nums[i] < path.get(path.size() - 1) || used.contains(nums[i])) {continue;}path.add(nums[i]);used.add(nums[i]);backtrack(nums, i + 1);path.remove(path.size() - 1);}}
​
}

《代码随想录》回溯算法:全排列

本题的完整题目如下:

image.png

本题的完整思路如下: 1.本题与前边的题不一样,前边的题是组合,而该题是排列。组合问题中,引入了一个变量startindex来控制下次遍历时从当前元素的下一个元素开始遍历,而排列问题不是,排列问题需要遍历数组中的所有元素,所以需要引入一个数组来表明哪些元素还没有遍历,直到所有元素都遍历,才结束。 2.所以本题分为三部: 3.第一步:确定递归函数的返回值和参数:返回值无,参数是原数组和used数组,该数组为boolean数组,大小与原数组一致。 4.第二步:确定递归函数的终止条件:由于是排列问题,所以当path集合的大小与原数组大小一样时,表明所有元素都遍历过一遍了,此时可以结束。,存储结果,返回。 5.第三步:确定单次递归函数中的逻辑:for循环的起始值不是从startindex开始了,此时需要从0开始,一直到数组的所有元素都被遍历。所以在遍历时,首先判断当前索引对应的used数组中的值是否为false,如果为true则表明当前元素已经被遍历过了,continue。如果为false,则进行遍历,回溯。 6.本题的关键在于区分清楚排序与组合问题的不同之处,怎么区分该元素是否已经被遍历过,怎么将原数组中的所有元素都遍历一遍。 本题的完整代码如下:

//46.全排列
class Solution11 {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> permute(int[] nums) {boolean[] used = new boolean[nums.length];backtrack(nums, used);return res;}public void backtrack(int[] nums, boolean[] used) {if(path.size() == nums.length) {res.add(new ArrayList<>(path));return;}for(int i = 0; i < nums.length; i++) {if(used[i] == true) {continue;}path.add(nums[i]);used[i] = true;backtrack(nums, used);path.remove(path.size() - 1);used[i] = false;}}
}

《代码随想录》回溯算法:全排列II

本题的完整题目如下:

image.png

本题的完整思路如下: 1.本题与上一题的区别是该题中的数组元素中存在重复值,所以涉及到去重问题,但是由于将原数组排序后得出的结果与排序前的结果是一样的,因为是排序问题。所以该题相比上题就多一个排序的过程,再判断是否重复即可。 完整代码如下:

//46.全排列Ⅱ
class Solution12 {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> permuteUnique(int[] nums) {boolean[] used = new boolean[nums.length];Arrays.sort(nums);backtrack(nums, used);return res;}public void backtrack(int[] nums, boolean[] used) {if(path.size() == nums.length) {res.add(new ArrayList<>(path));return;}
​for(int i = 0; i < nums.length; i++) {if(i >=1 && nums[i] == nums[i - 1] && used[i - 1] == false) {continue;}if(used[i] == true) {continue;}path.add(nums[i]);used[i] = true;backtrack(nums, used);path.remove(path.size() - 1);used[i] = false;
​}}
}

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

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

相关文章

Lucas-Kanade光流法详解

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 光流&#xff08;Optical Flow&#xff09;描述的是图像序列中各像素点随时间的运动情况&#xff0c;是计算机视觉中的基本问题之一。光流问题涉及尝试找出一幅图像中的许多点在第二幅图像中移动的…

电脑里msvcr120.dll文件丢失怎样修复?

电脑里msvcr120.dll文件丢失的修复指南 在电脑的日常使用中&#xff0c;我们可能会遇到各种各样的系统文件丢失问题&#xff0c;其中msvcr120.dll文件的丢失就是较为常见的一种。作为一名在软件开发领域深耕多年的从业者&#xff0c;我将为大家详细解析msvcr120.dll文件的重要…

windows终端conda activate命令行不显示环境名

问题&#xff1a; 始终不显示环境名 解决 首先需要配置conda的环境变量 确保conda --version能显示版本 然后对cmd进行初始化&#xff0c;如果用的是vscode中的终端&#xff0c;那需要对powershell进行初始化 Windows CMD conda init cmd.exeWindows PowerShell conda …

django vue3实现大文件分段续传(断点续传)

前端环境准备及目录结构&#xff1a; npm create vue 并取名为big-file-upload-fontend 通过 npm i 安装以下内容"dependencies": {"axios": "^1.7.9","element-plus": "^2.9.1","js-sha256": "^0.11.0&quo…

黑马跟学.苍穹外卖.Day01

黑马跟学.苍穹外卖.Day01 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库…

基于动力学的MPC控制器设计盲点解析

文章目录 Apollo MPC控制器的设计架构误差模型和离散化预测模型推导目标函数和约束设计优化求解优化OSQP求解器参考文献 Apollo MPC控制器的设计架构 误差模型和离散化 状态变量和控制变量 1、Apollo MPC控制器中状态变量主要有如下6个 matrix_state_ Matrix::Zero(basic_stat…

2025/1/1 路由期末复习作业二

呼呼呼祝大家元旦节快乐啦&#xff01;&#xff08;我顶着我超重的黑眼圈说&#xff09; 昨天一个人在寝室一边吃泡面&#xff0c;一边看步步惊心&#xff0c;一边吃一边哭呜呜呜呜呜若曦为什么不和八爷在一起好好爱&#xff0c;就因为他不当皇帝蛮&#xff01;难测最是帝王心…

面试题解,JVM中的“类加载”剖析

一、JVM类加载机制说一下 其中&#xff0c;从加载到初始化就是我们的类加载阶段&#xff0c;我们逐一来分析 加载 “加载 loading”是整个类加载&#xff08;class loading&#xff09;过程的一个阶段&#xff0c;加载阶段JVM需要完成以下 3 件事情&#xff1a; 1&#xff0…

后端开发-Maven

环境说明&#xff1a; windows系统&#xff1a;11版本 idea版本&#xff1a;2023.3.2 Maven 介绍 Apache Maven 是一个 Java 项目的构建管理和理解工具。Maven 使用一个项目对象模型&#xff08;POM&#xff09;&#xff0c;通过一组构建规则和约定来管理项目的构建&#xf…

UML之泛化、特化和继承

在UML&#xff08;统一建模语言&#xff09;中&#xff0c;泛化&#xff08;Generalization&#xff09;和特化&#xff08;Specialization&#xff09;是面向对象思想中继承&#xff08;Inheritance&#xff09;关系的重要概念&#xff0c;它们描述类与类&#xff08;或用例与…

【时时三省】(C语言基础)常见的动态内存错误2

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对非动态开辟空间内存使用free释放 示例&#xff1a; 这个arr数组是在栈上的 *p指向的就是arr 对非动态空间也用了free ferr只能在动态开辟空间使用 使用free释放一块动态开辟空间的一部分…

leecode718.最长重复子数组

二维空间版 class Solution { public:int findLength(vector<int>& nums1, vector<int>& nums2) {int mnums1.size(),nnums2.size();vector<vector<int>> dp(m,vector<int>(n));int result0;for(int i0;i<m;i)if(nums1[i]nums2[0]){…

「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能

本篇教程将实现滑动解锁屏幕功能&#xff0c;通过 Slider 组件实现滑动操作&#xff0c;学习事件监听、状态更新和交互逻辑的实现方法。 关键词 滑动解锁UI交互状态管理动态更新事件监听 一、功能说明 滑动解锁屏幕功能包含以下功能&#xff1a; 滑动解锁区域&#xff1a;用…

电子应用设计方案86:智能 AI背景墙系统设计

智能 AI 背景墙系统设计 一、引言 智能 AI 背景墙系统旨在为用户创造一个动态、个性化且具有交互性的空间装饰体验&#xff0c;通过融合先进的技术和创意设计&#xff0c;提升室内环境的美观度和功能性。 二、系统概述 1. 系统目标 - 提供多种主题和风格的背景墙显示效果&…

基于物联网疫苗冷链物流监测系统设计

1. 项目开发背景 随着全球对疫苗运输要求的提高&#xff0c;特别是针对温度敏感型药品&#xff08;如疫苗&#xff09;的冷链管理&#xff0c;如何保证疫苗在运输过程中的温度、湿度、震动等环境因素的稳定性已成为亟需解决的问题。疫苗运输过程中&#xff0c;任何温度或湿度的…

Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】

随着城市化进程的快速推进&#xff0c;城市高层建筑不断增多&#xff0c;对建筑质量的要求也在不断提高。建筑外墙检测&#xff0c;如平整度和垂直度检测&#xff0c;是衡量建筑质量的重要指标之一。传统人工检测方法不仅操作繁琐、效率低下&#xff0c;还难以全面反映墙体的真…

瑞吉外卖项目学习笔记(十)修改套餐、删除套餐、起售和停售套餐

瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现 瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现 瑞吉外卖项目学习笔记(三)过滤器实现登录校验、添加员工、分页查询员工信息 瑞吉外卖项目学习笔记(四)TableField(fill FieldFill.INSERT)公共字…

Python 实时获取Linux服务器信息

在进行服务器监控、运维管理时&#xff0c;实时获取服务器信息至关重要。特别是在 Linux 环境下&#xff0c;我们常常需要获取系统的运行状态、资源占用情况以及硬件信息。如果你是运维人员、开发者或是正在做自动化运维任务的人&#xff0c;那么如何高效地实时获取 Linux 服务…

MATLAB程序转C# WPF,dll集成,混合编程

工作中遇到一个需求&#xff0c;有一部分算法的代码需要MATLAB来进行处理&#xff0c;而最后需要集成到C#中的wpf项目中去&#xff0c;选择灵活性更高的dll&#xff0c;去进行集成。&#xff08;可以简单理解为&#xff1a;将MATLAB的函数&#xff0c;变为C#中类的函数成员&…

「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏

本篇教程将带你实现一个数字填色小游戏&#xff0c;通过简单的交互逻辑&#xff0c;学习如何使用鸿蒙开发组件创建趣味性强的应用。 关键词 UI互动应用数字填色动态交互逻辑判断游戏开发 一、功能说明 数字填色小游戏包含以下功能&#xff1a; 数字选择&#xff1a;用户点击…