代码随想录-Day29
491. 非递减子序列
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。
数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。
示例 1:
输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]
示例 2:
输入:nums = [4,4,3,2,1]
输出:[[4,4]]

class Solution {private List<Integer> path = new ArrayList<>();private List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> findSubsequences(int[] nums) {backtracking(nums,0);return res;}private void backtracking (int[] nums, int start) {if (path.size() > 1) {res.add(new ArrayList<>(path));}int[] used = new int[201];for (int i = start; i < nums.length; i++) {if (!path.isEmpty() && nums[i] < path.get(path.size() - 1) ||(used[nums[i] + 100] == 1)) continue;used[nums[i] + 100] = 1;path.add(nums[i]);backtracking(nums, i + 1);path.remove(path.size() - 1);}}
}
这段代码定义了一个名为Solution的类,该类包含方法用于寻找给定整数数组nums中所有递增的非空子序列。递增子序列是指数组中数字按顺序排列(每个数字可以重复)的子集。以下是代码的详细解析:
类成员变量
path: 一个List<Integer>类型的变量,用于存储当前递归路径上的数字,即当前正在构建的递增子序列。res: 另一个List<List<Integer>>类型的变量,用于存储所有找到的递增子序列。
方法 findSubsequences
- 功能: 接收一个整型数组
nums作为输入,返回该数组的所有递增非空子序列。 - 实现: 首先调用
backtracking方法启动回溯过程,并返回最终结果列表res。
方法 backtracking
- 输入参数:
nums: 整型数组,全局输入数据。start: 整型变量,表示当前回溯搜索的起始位置,避免重复使用已经确定不在子序列中的元素。
- 功能: 通过回溯算法递归地构建所有递增子序列。
回溯核心逻辑
-
剪枝: 如果当前路径
path的大小超过1(意味着至少有两个元素),说明找到了一个有效的递增子序列,将其添加到结果列表res中。 -
避免重复: 引入一个整型数组
used来标记当前层递归中nums[i]是否已经被使用过,以避免生成重复子序列。数组大小为201,是因为整数范围为-100到100,通过加100映射到数组索引中,这样可以使用正数索引,简化判断和访问逻辑。 -
遍历与选择: 从
start位置开始遍历nums数组,对于每个元素,执行以下操作:- 如果当前路径非空且新元素小于路径尾部元素,或者当前元素在当前层已使用过(由
used数组判断),则跳过此次循环继续下一个元素,这是为了保证子序列递增且不重复。 - 标记当前元素在当前层已使用。
- 将当前元素加入路径
path。 - 以当前位置的下一个元素为起点,进行下一层递归调用。
- 回溯:从路径中移除最后一个元素,恢复到上一步状态,尝试下一个可能的选择。
- 如果当前路径非空且新元素小于路径尾部元素,或者当前元素在当前层已使用过(由
最终,当回溯过程完成,所有递增子序列会被收集在res中,并由findSubsequences方法返回。
46. 全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1]
输出:[[1]]

class Solution {List<List<Integer>> result = new ArrayList<>();// 存放符合条件结果的集合LinkedList<Integer> path = new LinkedList<>();// 用来存放符合条件结果boolean[] used;public List<List<Integer>> permute(int[] nums) {if (nums.length == 0){return result;}used = new boolean[nums.length];permuteHelper(nums);return result;}private void permuteHelper(int[] nums){if (path.size() == nums.length){result.add(new ArrayList<>(path));return;}for (int i = 0; i < nums.length; i++){if (used[i]){continue;}used[i] = true;path.add(nums[i]);permuteHelper(nums);path.removeLast();used[i] = false;}}
}
这段代码定义了一个名为Solution的类,其中主要实现了获取一个整型数组所有可能的排列组合的功能。下面是详细的解析:
类成员变量
result: 类型为List<List<Integer>>,用于存储所有满足条件的排列结果。path: 类型为LinkedList<Integer>,作为一个临时列表,用于在递归过程中暂存当前排列。used: 类型为boolean[],标记数组中的元素在当前排列中是否已被使用过,避免重复选择。
方法 permute
- 功能: 接收一个整型数组
nums作为输入,返回该数组所有可能的排列组合。 - 逻辑:
- 首先检查输入数组是否为空,若为空直接返回空结果列表。
- 初始化布尔数组
used,长度与输入数组相同,用于记录每个元素的使用状态。 - 调用辅助函数
permuteHelper(nums)来进行实际的排列生成。
方法 permuteHelper
- 功能: 实现深度优先搜索(DFS)回溯算法来生成所有排列。
- 逻辑:
- 当
path的大小等于原数组长度时,说明已经生成了一个完整的排列,将其添加到结果列表result中,然后返回。 - 对于数组
nums中的每个元素,进行以下操作:- 若该元素已经在当前排列中使用过(
used[i] == true),则跳过,避免重复。 - 标记该元素为已使用(
used[i] = true),将它添加到path中。 - 递归调用
permuteHelper(nums)生成剩余元素的排列。 - 在递归调用返回后(即处理完以当前元素为固定位置的所有情况),需要“撤销”选择:将
used[i]重置为false,并将nums[i]从path中移除,回溯到上一层继续尝试其他元素。
- 若该元素已经在当前排列中使用过(
- 当
综上所述,这个程序利用回溯算法深度优先遍历所有可能的排列组合情况,有效地解决了给定数组元素的全排列问题。
相关文章:
代码随想录-Day29
491. 非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情…...
C/C++ 进阶(6)红黑树
个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 目录 一、概念 性质 二、操作 插入 情况一:cur为红、p为红、g为黑,如果u存在且为红 步骤: 情况二:cur为红、p为红、g为黑,如果u不存在或…...
【Vue】构建vuex-cart模块
说明:既然明确数据要存 vuex,建议分模块存,购物车数据存 cart 模块,将来还会有 user 模块,article 模块… 新建 store/modules/cart.js 挂载到 vuex 仓库上 store/cart.js import Vue from vue import Vuex from vu…...
如何成为嵌入式系统工程师?
各位朋友,如果你们有意向投身于嵌入式开发领域,那么强烈建议你们在软件和硬件两个方面均展开深入且全面的学习。 嵌入式计算机作为嵌入式系统的核心技术支撑,其是直接面向用户、产品以及应用的,无论是软件还是硬件方面都能发挥重要…...
【AI大模型】Transformers大模型库(七):单机多卡推理之device_map
目录 一、引言 二、单机多卡推理之device_map 2.1 概述 2.2 自动配置,如device_map"auto" 2.3 手动配置,如device_map"cuda:1" 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#x…...
驱动代码编写(一)
驱动程序的作用 驱动程序是指与硬件设备和操作系统进行通信的软件。它的主要功能有以下几个方面: 提供硬件支持:驱动程序允许操作系统与硬件设备进行通信,以便正确地操作和控制硬件设备。它可以向操作系统提供有关硬件设备的各种信息&#x…...
Prompt-to-Prompt Image Editing with Cross Attention Control
Prompt-to-Prompt Image Editing with Cross Attention Control (P2P) Amir Hertz, Tel Aviv University, ICLR23, Paper, Code 1. 前言 编辑对这些生成模型来说是具有挑战性的,因为编辑技术的一个固有特性是保留大部分原始图像,而在基于文本的模型中…...
实验11 OSPF协议配置
实验11 OSPF协议配置 一、OSPF单区域配置(一)原理描述(二)实验目的(三)实验内容(四)实验配置(五)实验步骤 二、OSPF多区域配置(一)原理…...
ChatGPT-4o, 腾讯元宝,通义千问对比测试中文文化
国内的大模型应用我选择了国内综合实力最强的两个,一个是腾讯元宝,一个是通义千问。其它的豆包,Kimi,文心一言等在某些领域也有强于竞品的表现。 问一个中文文化比较基础的问题,我满以为中文文化chatGPT不如国内的大模型。可事实…...
node.js学习
node.js学习实操及笔记 温故node.js,node.js学习实操过程及笔记~ node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记 为什么学node.js 可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vue react angular离不开node.js …...
python将一个图片雕刻镂空成二维码
本文使用创作助手。 要将一个图片雕刻镂空成二维码,你可以使用Python中的Pillow库来处理图像,并使用qrcode库来生成二维码。以下是一个示例代码,用于将图片雕刻镂空成二维码: import qrcode from PIL import Image# 打开待处理的…...
OS进程取样器OS Process Sampler执行CMD/Shell命令
Apache JMeter - Users Manual: Component Reference 1.背景 项目上最近需要测试一种很少用到的DICOM协议,但是网上资料很少,基本上可以总结为三种方案: 直接发送TCP 16进制数据包,但是参数化数据准备难度大通过开发封装jar包发送,需要开发组提供通过发送cmd命令给前置机…...
excel两个数据表格,怎样实现筛选的联动?
如图,想要通过处理器或者像素条件进行筛选,形成一个右边图2的对比表,如何实现实现联动显示呢? 这个在excel里可以借用数据透视表切片器来完成。步骤如下: 1.添加表 选中数据区域中任意一个单元格,点击 插…...
python,django好的get和post请求
获得get请求 df request.GET.get("dades")获得post请求 文件settings.py关闭csrf MIDDLEWARE [ ‘django.middleware.security.SecurityMiddleware’, ‘django.contrib.sessions.middleware.SessionMiddleware’, ‘django.middleware.common.CommonMiddleware’…...
volatile的用法
目录 前言 使用volatile的注意事项: 示例: 总结: 前言 在嵌入式C编程中,volatile是一个关键字,它用于告知编译器被修饰的变量可能会在程序的任何地方、任何时候被不可预见的、非程序本身控制的因素所改变。这通常…...
MySQL 与 PostgreSQL 关键对比二(SQL语法)
目录 1 详细示例 1.1自动增量列 1.2 字符串连接 1.3 JSON 支持 2 总结 MySQL 和 PostgreSQL 是两种流行的开源关系数据库管理系统(RDBMS)。尽管它们在许多方面相似,但在 SQL 语法和功能上存在一些显著差异。 以下SQL语句的执行如果需要开…...
徐州服务器租用该如何维护?
服务器能够帮助企业处理网络上大部分的数据和信息,在互联网行业中起着十分重要的作用,服务器的存在能够保障网站稳定的运行,主要是由内存、硬盘和处理器等组成,服务器除了进行正常的工作运行,还需要定期维护和管理&…...
C++习题精选(4)—— 栈
目录 1. 最小栈2. 栈的压入弹出序列3. 逆波兰表达式求值 1. 最小栈 题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素…...
Web前端ES6-ES13笔记合集(下)
#### 五.ES10新特性 ##### 1. Object.fromEntries > Object.fromEntries()方法允许你轻松地将键值对列表转换为对象 js const arr [["name", "kerwin"], ["age", 100]]; console.log(Object.fromEntries(arr))//{name: kerwin, age: 100} …...
我要成为算法高手-双指针篇
目录 什么是双指针?问题1:移动零问题2:复写零问题3:快乐数问题4:盛最多水的容器问题5:有效三角形个数问题6:查找总价格和为目标值的两个商品(两数之和)问题7:三数之和问题8:四数之和…...
Windows音频捕获终极革命:告别系统混音器,实现进程级精准录音
Windows音频捕获终极革命:告别系统混音器,实现进程级精准录音 【免费下载链接】win-capture-audio An OBS plugin that allows capture of independant application audio streams on Windows, in a similar fashion to OBSs game capture and Discords …...
Phi-4-Reasoning-Vision开源大模型实践:图文多模态输入格式与Phi-4模型要求对齐
Phi-4-Reasoning-Vision开源大模型实践:图文多模态输入格式与Phi-4模型要求对齐 1. 项目概述 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为双卡RTX 4090环境优化。该工具严格遵循官方SYSTEM…...
电脑 TPM 怎么查看、开启与关闭?一文讲清安全与系统必备设置
现在安装 Windows 11、使用设备加密、安全启动、BitLocker 等功能,都离不开 TPM 安全芯片,很多人在升级系统、加固电脑安全时,才第一次接触到 TPM,却不知道自己的电脑是否支持、在哪里查看、如何开关,甚至因为不懂操作…...
答辩 PPT「懒人救星」实测:paperxie AI 一键把论文转成答辩稿,再也不用熬夜排版
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPT 谁本科答辩没栽在 PPT 上?万字论文…...
别再死记硬背了!用ChatGPT/Claude帮你理解AIGC面试题(附Prompt)
用AI对话引擎拆解AIGC面试核心:从死记硬背到深度理解的范式转移 在准备AIGC算法面试时,大多数候选人都会陷入"八股文"的泥潭——机械记忆概念定义却难以理解技术本质。这种学习方式不仅效率低下,更无法应对面试官深入的技术追问。本…...
OpenClaw多端同步:GLM-4.7-Flash任务跨设备执行方案
OpenClaw多端同步:GLM-4.7-Flash任务跨设备执行方案 1. 为什么需要多端同步? 去年冬天的一次出差经历让我深刻体会到设备割裂的痛苦。当时我正在用OpenClaw处理一个数据分析项目,笔记本上运行着GLM-4.7-Flash模型生成的自动化脚本。突然接到…...
CLIP-GmP-ViT-L-14匹配精度实测:Softmax置信度排序效果惊艳案例集
CLIP-GmP-ViT-L-14匹配精度实测:Softmax置信度排序效果惊艳案例集 1. 引言:当图片遇见文字,CLIP如何精准“读懂”? 想象一下,你有一张照片,里面可能是一只猫、一辆车,或者一片风景。如果让你用…...
DAMOYOLO-S入门教程:如何扩展自定义类别——微调适配行业新标签
DAMOYOLO-S入门教程:如何扩展自定义类别——微调适配行业新标签 你是不是遇到过这样的问题?手头有一个很棒的通用目标检测模型,比如DAMOYOLO-S,它识别猫猫狗狗、汽车行人很在行,但你想让它帮你检测生产线上的特定零件…...
OpenClaw关键词挖掘Agent配置(附SOP脚本,可直接复制使用)
OpenClaw关键词挖掘Agent全栈配置指南(附可执行SOP脚本)一、系统架构解析OpenClaw关键词挖掘系统采用分布式架构,核心由以下模块构成:数据采集层实时爬虫引擎:支持动态IP代理,突破反爬限制API集成模块&…...
VoxCPM-1.5语音合成作品集:高清自然语音生成效果展示
VoxCPM-1.5语音合成作品集:高清自然语音生成效果展示 1. 开篇:当AI学会"说话" 想象一下,你正在制作一部有声书,需要一位声音温暖、吐字清晰的主播。传统方式可能需要花费数千元聘请专业配音员,录制数小时音…...
