Leetcode 491 递增子序列

题意理解

输入: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.

   要注意:集合中的元素有重复,需要去重操作。——这就是这道题的难点。

解题思路

        涉及子集问题,一般可以用回溯的方法来进行解决。

        回溯的解决方案通常可以抽象为一棵树。可以画一幅画来理解:

        紫色的部分即为需要剪枝去重的地方,所以我们需要一个设置uset来记录当前层用过的元素,当当前层有重复元素出现时,需要进行剪枝操作。

        

1.暴力回溯+剪枝优化

 回溯算法三个常见步骤:

        确定返回值和参数列表

        确定终止条件:集合中所有元素遍历完,即startIndex>nums.size

        确定单层逻辑:使用uset来记录当前层用过的值。

注意: 子集递增,单不是严格递增,所以允许重复值存在。

            剪枝: 当前层当前树枝的重复值要剪枝。

                        递减子序列要剪枝。

List<List<Integer>> result=new ArrayList<>();LinkedList<Integer> path=new LinkedList<>();public List<List<Integer>> findSubsequences(int[] nums) {backtracking(nums,0);return result;}public void backtracking(int[] nums,int startIndex){//结果收集if(path.size()>=2) result.add(new ArrayList<>(path));if(startIndex>=nums.length) return;//可以省略,因为startIndex>=nums.length,下面循环不会进入//记录当前树枝当前层用过的值Set<Integer> uset=new HashSet<>();for(int i=startIndex;i<nums.length;i++){if(uset.contains(nums[i])){//当前树枝当前层树枝重复则剪枝continue;}if(path.size()!=0&&nums[i]< path.getLast()) continue;//递减时剪枝uset.add(nums[i]);path.add(nums[i]);backtracking(nums,i+1);path.removeLast();}}

2.分析

时间复杂度:O(n\times 2^{n})

空间复杂度:O(n)

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

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

相关文章

刘家窑中医院王忠主任:心脑血管健康知识的传播者和实践者

为普及心脑血管健康知识&#xff0c;呼吁市民注重心脑血管健康&#xff0c;王忠主任及其科室医护人员举办进社区义诊咨询的活动。王忠主任及多名中医心脑专家和护理人员为社区居民免费进行量血压、测血糖以及健康咨询等义诊活动。 王忠主任用了全身的心血&#xff0c;学习百家吸…

LTC是什么意思?CRM怎样帮助这一流程的实现?

在现代商业环境下&#xff0c;将潜在客户转化成实际销售是公司成功的基石之一。而CRM管理系统是完成LTC的有效工具。本文将向您介绍LTC是什么&#xff1f;公司怎样企业如何通过CRM实现这一流程的&#xff1f; LTC&#xff08;从线索到现金&#xff09;是企业运营管理中的一个重…

Python 使用 openpyxl 写表格

当前环境&#xff1a;Win10 x64 MS office 2016 Python3.7 openpyxl3.0.9 1 写入表格 from openpyxl import Workbook# 创建一个 workbook workbook_w Workbook()# 获取被激活的 worksheet worksheet_w workbook_w.active# 1 批量插入数据# 设置一行数据 worksheet_w.ap…

Mo 人工智能教学实训平台年终发布会——发现意外 创造可能

发布会视频回放 –发现意外 创造可能– 在技术迅猛发展的时代里&#xff0c;人工智能教育成为推动社会进步的关键力量&#xff0c;大模型更是各行业的必备技能。为了深度探索教育与人工智能的融合&#xff0c;Mo 人工智能教学实训平台于12月12日举行线上年终发布会&#xff0…

电子烟MOS的选型与要求分析

工作原理&#xff1a; 当用户在吸嘴处抽吸时&#xff0c;气流经过进气孔&#xff0c;穿 过电路板上方的咪头&#xff0c;咪头即产生电信号&#xff0c;驱 动芯片板&#xff0c;让电池供电给雾化芯&#xff0c;雾化芯中的 发热丝将电能转化成热能&#xff0c;当温度达到雾化液 …

K8s中pod詳解

目录 Yaml语法解析 Pod pod是如何被创建的 1.创建一个pod 2.创建一个多容器pod 进入容器 3.配置节点标签 4.Pod容器的交互 4.1创建pod&#xff0c;并做本地解析 4.2pod共享进程 4.3pod共享宿主机namespace 5.钩子函数lifecycle 基础指令 # 查看对应资源: 状态 $ kubectl…

家委会的职责

家委会&#xff0c;起着至关重要的作用。然而&#xff0c;而很多人对家委会的职责并不清楚。 家委会是家长与学校之间的沟通桥梁。家委会成员需要积极与学校沟通&#xff0c;了解学校的各项政策和规定&#xff0c;并及时向家长传达。同时&#xff0c;家委会也需要收集家长的意见…

leetcode算法题:省份数量

leetcode算法题547 链接&#xff1a;https://leetcode.cn/problems/number-of-provinces 题目 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间…

立创EDA把三个单独的PCB合并成一个文件

[TOC](立创EDA把三个单独的PCB合并成一个文件 1.具体操作 1.具体操作 参考&#xff1a;立创社区 先选中PCB CTRLSHIFTC, CTRLSHIFTV** **

fcntl函数简介和使用

一、fcntl函数的作用 read函数是典型的阻塞模型&#xff0c;当缓冲区里的数据不就绪的时候&#xff0c;会一直阻塞等待。这是正常的&#xff0c;因为文件描述符默认是阻塞IO&#xff0c;而我们可以通过 fcntl 接口函数将文件描述符设置为非阻塞IO。 设置成非阻塞IO以后&#x…

发送java字节码的数据包

一些Java反序列化漏洞在利用时&#xff0c;要发送Java序列化值&#xff08;字节码&#xff09;到服务器。 我们在使用一些工具生成字节码后&#xff0c;可以通过python或者burp发送。 生成的字节码一般以两种形式存储&#xff1a; 1、二进制形式存储到 poc.ser 2、将字节码…

系统架构达人亲授:多电商活动从容应对的顶级秘籍!

大家好&#xff0c;我是小米&#xff0c;一个热爱技术分享的小伙伴。最近我参加了一场社招面试&#xff0c;遇到了一道非常有趣的题目&#xff1a;在面对多个电商活动时&#xff0c;从架构上需要做到什么支持呢&#xff1f;今天我就来和大家分享一下我的思考和解答。 引言 随…

关于面试总结--接口测试面试题

前言 接口测试最近几年被炒的火热了&#xff0c;越来越多的测试同行意识到接口测试的重要性。接口测试为什么会如此重要呢&#xff1f; 主要是平常的功能点点点&#xff0c;大家水平都一样&#xff0c;是个人都能点&#xff0c;面试时候如果问你平常在公司怎么测试的&#xff…

广州华锐互动:AI虚拟数字人为教培行业带来诸多变革和创新

随着科技的不断发展&#xff0c;人工智能技术已经逐渐渗透到各个行业&#xff0c;其中教育领域也不例外。近年来&#xff0c;AI虚拟数字人在教培行业的应用越来越广泛&#xff0c;为教育行业带来了诸多变革和创新。 广州华锐互动作为一家虚拟现实内容制作商&#xff0c;已开发了…

深度学习中的13种概率分布

1 概率分布概述 共轭意味着它有共轭分布的关系。 在贝叶斯概率论中&#xff0c;如果后验分布 p&#xff08;θx&#xff09;与先验概率分布 p&#xff08;θ&#xff09;在同一概率分布族中&#xff0c;则先验和后验称为共轭分布&#xff0c;先验称为似然函数的共轭先验。 多…

尚硅谷Docker笔记-基础篇

B站视频&#xff1a;https://www.bilibili.com/video/BV1gr4y1U7CY 1.Docker简介 解决了运行环境和配置问题的软件容器 方便做持续集成并有助于整体发布的容器虚拟化技术 容器与虚拟机比较 Docker 容器是在操作系统层面上实现虚拟化&#xff0c;直接复用本地主机的操作系统…

防反接电路设计和保姆级实测

文末有封面图&#xff01;~&#xff01;~ 注意&#xff1a;正确的防反接电路在实验C ​​​​​​​ 前言 一、实验器材 二、实验步骤 正确的电路在实验C 1 实验A&#xff1a; 2 实际A数据&#xff1a; 3 实验A结论 4 实验B 5 实际B数据&#xff1a; 6 实际B结论&…

服务器感染了.DevicData-D-XXXXXXXX勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 勒索病毒成为网络安全的严峻挑战&#xff0c;而最新的.DevicData-D-XXXXXXXX勒索病毒更是引起广泛关注。本文将深入介绍.DevicData-D-XXXXXXXX勒索病毒的特征&#xff0c;提供恢复被其加密的数据文件的方法&#xff0c;并分享预防措施&#xff0c;以确保您的数…

ubuntu or MacOS 源码安装 fmt fmtlib

1&#xff0c;前情 提醒这个源代码需要从release中下载 打包好的&#xff0c;而直接用git clone下载不了&#xff0c;可能github上的这个git clone的链接仅仅是给fmt lib的开发者使用的吧&#xff1b; 下载fmtlib的release源代码u下载fmtlib的release源代码 2&#xff0c;解压编…

Jmeter实现服务器端后台接口性能测试!

实现目的 在进行服务器端后台接口性能测试时&#xff0c;需要连接到Linux服务器端&#xff0c;然后通过命令调用socket接口&#xff0c;这个过程就需要用到jmeter的SSH Command取样器实现了。 脚本实现 设置CSV Data Set ConFig配置元件&#xff0c;参数化测试数据 设置SSH…