LeetCode-非递增子序列

server/2024/9/22 16:51:45/

每日一题

今天刷的依旧是一道中等题,不过感觉今天这道题是中等难度里面比较难的题了,思考了很长时间。过程感觉比较难以理解。

题目要求

给你一个整数数组 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]]

题目解析

这道题要求求出数组中所有的非递减子序列,我乍一看觉得不难,直接回溯算法感觉就可以解出,但是后面察觉此题并不简单,因为还需要去重,单纯使用最简单的回溯算法不能达到去重的目的,因此还要进行其他的额外的操作进行去重。

首先选出非递增的子序列很简单,如果在回溯选择时如果当前的数大于等于上一个数,就可以被选择加入到回溯的暂时数组中。

重点是如何跨数字选择和如何去重?这里采用两一次递归中要进行两次递归,第一次递归就是上面说的情况,第二次递归是要进行一次判断,每次递归时都会记录下本次操作的数字和上次操作的数字,当这两个数字不相等时则进入第二次递归,第二次递归会不选择当前的数字,直接选择下一个数字,因为两个数如果相等的话跳过当前的数字选择后面的数就是没有意义,这种重复的情况在第一次递归时已经进行了。第二次递归第一次递归结束出来后,从后往前寻找之前没有记录过的组合。因此两数相等时直接跳过,两个数只需要选择一次即可。

代码实现

java">class Solution {List<Integer> temp = new ArrayList<Integer>();List<List<Integer>> ans = new ArrayList<List<Integer>>();public List<List<Integer>> findSubsequences(int[] nums) {dfs(0, Integer.MIN_VALUE, nums);return ans;}public void dfs(int cur, int last, int[] nums) {if (cur == nums.length) {if (temp.size() >= 2) {ans.add(new ArrayList<Integer>(temp));}return;}if (nums[cur] >= last) {temp.add(nums[cur]);dfs(cur + 1, nums[cur], nums);temp.remove(temp.size() - 1);}if (nums[cur] != last) {dfs(cur + 1, last, nums);}}
}


http://www.ppmy.cn/server/23889.html

相关文章

第27篇 Spring简介

Spring框架是Java企业级应用的主流框架&#xff0c;其主要基于IoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;和DI&#xff08;Dependency Injection&#xff0c;依赖注入&#xff09;设计原则。Spring的核心语法主要包括Bean的定义、装配、自动扫描、A…

利用GaussDB的可观测性能力构建故障模型

D-SMART高斯专版已经开发了几个月了&#xff0c;目前主要技术问题都已经解决&#xff0c;也能够初步看到大概的面貌了。有朋友问我&#xff0c;GaussDB不已经有了TPOPS了&#xff0c;为什么你们还要开发D-SMART高斯专版呢&#xff1f; 实际上TPOPS和D-SMART虽然都可以用于Gaus…

前端vue scope的定义以及用法

这段代码是 Vue 组件中用于定义表格列的代码&#xff0c;包含了自定义模板和逻辑&#xff0c;以显示特定格式的内容。在这里&#xff0c;el-table-column 来自 Element UI 框架&#xff0c;提供了一种简洁的方式来定义表格的列及其显示内容。 让我们看看这段代码的细节&#x…

pytorch 实现语义分割 PSPNet

语意分割是指一张图片上包含多个物体&#xff0c;通过语义分割可以识别物体分类、物体名称、像素识别的任务。和物体检测不同&#xff0c;他不会将物体框出来&#xff0c;而是根据像素的归属把物体标注出来。PSPNet 的输入是一张图片&#xff0c;例如300500&#xff0c;那么输出…

套接字以及相关函数

socket函数 linux下的socket函数&#xff1a; #include<sys/socket.h> int socket(int domain, int type, int protocol); 参数&#xff1a; domain 套接字中使用的协议族信息 type 套接字数据传输类型信息 …

算法人生(13):从“Scrum”看“PDCA时间管理法”

很多人会好奇为什么“读了很多书&#xff0c;却依然不知道怎么过好这一生”&#xff1f;大家可能都有各自的理解&#xff0c;但正如王阳明先生的“知行合一”所说&#xff0c;“知”要能“行”出来才算“真知”&#xff0c;生活中很多时候知并不一定能行&#xff0c;所以知与行…

YOLOv8+PyQt5输电线路缺陷检测(目前最全面的类别检测,可以从图像、视频和摄像头三种路径检测)

1.效果视频&#xff1a;YOLOv8PyQt5输电线路缺陷检测&#xff08;目前最全面的类别检测&#xff0c;可以从图像、视频和摄像头三种路径检测&#xff09;_哔哩哔哩_bilibili 资源包含可视化的输电线路缺陷检测系统&#xff0c;可识别图片和视频当中出现的五类常见的输电线路缺陷…

Phi-3-mini-4k-instruct 的功能测试

Model card 介绍 Phi-3-Mini-4K-Instruct 是一个 3.8B 参数、轻量级、最先进的开放模型&#xff0c;使用 Phi-3 数据集进行训练&#xff0c;其中包括合成数据和经过过滤的公开可用网站数据&#xff0c;重点是 高品质和推理密集的属性。 该型号属于 Phi-3 系列&#xff0c;Mini…