java数据结构与算法刷题-----LeetCode491. 非递减子序列

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

文章目录

在这里插入图片描述

解题思路:时间复杂度O( n 2 ∗ n n^2*n n2n),空间复杂度O(n)
  1. 90题的衍生题,此题需要处理的条件更多
  2. 首先保证序列至少2个元素
  3. 在原序列的基础上,找到升序排列的子集
  4. 剩余操作和90题一样
  5. 示例放在了代码注释里面。
🏆LeetCode90. 子集 IIhttps://blog.csdn.net/grd_java/article/details/136670669
代码

在这里插入图片描述

class Solution {
    int[] nums;
    int len;
    List<List<Integer>> ans = new ArrayList<List<Integer>>();
    public List<List<Integer>> findSubsequences(int[] nums) {
        this.nums = nums;this.len = nums.length;
        List<Integer> records = new ArrayList<>();
        backTracking(records,0,Integer.MIN_VALUE);
        return ans;
    }

    /**
     * 回溯算法
     * @param records 保存当前序列
     * @param start 起始位置
     * @param last 当前序列上一个插入的元素
     * 4    6       7       7
     *
     * 选   6>4选    7>6选   7 = 7选    得到序列[4,6,7,7]
     *                      试图不选这个7,发现前面也有一个7,则跳过
     *              试图不选这个7,发现前面是6,和当前不一样,所以不会重复
     * 选   选       不选     7>6 选     得到序列[4,6,7]
     *                      试图不选这个7,发现前面是6,不一样,可以不选这个值
     * 选   选       不选     不选       得到序列[4,6]
     *     试图不选这个6,前面4,不一样,可以不选
     * 选   不选      7>4选   7==7选     得到序列[4,7,7]
     *                      试图不选7,前面是7,相同,则跳过
     *              试图不选这个7,前面4,不同,可不选
     * 选   不选      不选    7>4选       得到序列[4,7]
     *                      试图不选这个7,前面4,不一样,可以不选
     * 选   不选      不选    不选        得到序列[4],但是只有一个元素,构不成升序序列,淘汰掉
     * 试图不选,前面没有值,可以不选
     * 不选  选       7>6选   7=7选      得到序列[6,7,7]
     * 不选  选       不选     选         得到序列[6,7]
     * 不选  选       不选     不选        得到[6],淘汰
     * 不选  不选      选      选         得到[7,7]
     * 不选  不选      选      不可以不选   跳过
     * 不选  不选      不选     选         得到[7] 淘汰
     * 不选  不选      不选     不选       得到[] 淘汰
     *
     * 最终得到答案[[4,6,7,7],[4,6,7],[4,6],[4,7,7],[4,7],[6,7,7],[6,7],[7,7]]
     */
    public void backTracking(List<Integer> records,int start,int last){
        if(start == len){
            if (records.size()>=2) ans.add(new ArrayList<>(records));//低于两个元素的序列,无法组成升序序列
        }else{
            int num = nums[start];
            if(num >= last){//如果>=上个元素,才能选择,构成升序序列
                records.add(num);
                backTracking(records,start+1,num);
                records.remove(records.size()-1);
            }
            //如果当前元素和上个元素一样,则不可以枚举不选当前元素的情况
            if(num != last) backTracking(records,start+1,last);
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型2

目录 1.模块的总体结构 1.1从工作空间导入输入信号 1.2FIR滤波器 2.Subsystem 3.MATLAB Function 文章灵感来源于MATLAB官方免费教程&#xff1a;HDL Coder Self-Guided Tutorial 考虑到MATLAB官网的英文看着慢&#xff0c;再加上视频讲解老印浓浓的咖喱味&#xff0c;我…

【数据结构与算法】排序

目 录 一.排序的概念及引用1.1 排序的概念1.2 常见的排序算法 二.常见排序算法的实现2.1 插入排序直接插入排序希尔排序( 缩小增量排序 ) 2.2 选择排序直接选择排序堆排序 2.3 交换排序冒泡排序快速排序快速排序优化&#xff1a;非递归实现快速排序 2.4归并排序2.4.3 海量数据的…

专题二 - 滑动窗口 - leetcode 30. 串联所有单词的子串 | 困难难度

leetcode 30. 串联所有单词的子串 leetcode 30. 串联所有单词的子串 | 困难难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现滑动窗口&#xff0c;并使用遍历判断两个哈希表是否相等滑动窗口&#xff0c;引入有效字符计数co…

libusb_Qt使用

Libusb libusb_github 建议直接下载库&#xff0c;编译好麻烦 QT调用 .pro文件添加&#xff1a; win32: LIBS -L$$PWD/LIB/libusb/x64/ -llibusb-1.0.cpp调用即可 #include "LIB/libusb/libusb.h" void class_name::fun(){/* 1. */libusb_init(NULL);/**/str…

软考高级:信息系统开发方法2(形式化方法、统计过程方法等)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【深度学习目标检测】二十三、基于深度学习的行人检测计数系统-含数据集、GUI和源码(python,yolov8)

行人检测计数系统是一种重要的智能交通监控系统&#xff0c;它能够通过图像处理技术对行人进行实时检测、跟踪和计数&#xff0c;为城市交通规划、人流控制和安全管理提供重要数据支持。本系统基于先进的YOLOv8目标检测算法和PyQt5图形界面框架开发&#xff0c;具有高效、准确、…

42.坑王驾到第八期:uniCloud报错

uniCloud 报错 今天调用云函数来调试小程序的时候突然暴了一个奇葩错误&#xff0c;require(…).main is not a function。翻官方文档后发现&#xff0c;原来是这样&#xff1a;**如果你写的是云对象&#xff0c;入口文件应为 index.obj.js&#xff0c;如果你写的是云函数入口…

在centOS服务器安装docker,并使用docker配置nacos

遇到安装慢的情况可以优先选择阿里镜像 安装docker 更新yum版本 yum update安装所需软件包 yum install -y yum-utils device-mapper-persistent-data lvm2添加Docker仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep…

CentOS 7安装MySQL及初始化操作教程

一、引言 MySQL是一款广泛使用的开源关系型数据库管理系统&#xff0c;适用于各种规模的应用场景。在CentOS 7系统中安装MySQL并进行初始化操作&#xff0c;可以为我们的应用程序提供稳定、可靠的数据存储服务。本文将详细介绍CentOS 7安装MySQL及初始化操作的步骤。 目录 一、…

Midjourney绘图欣赏系列【人物篇】(一)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

2024 年排名前 5 名的 Mac 数据恢复软件分享

如果您已经在 Mac 上丢失了数据并且正在寻找恢复数据的方法&#xff0c;那么您来对地方了。互联网上有超过 50 个适用于 Mac 的数据恢复程序。哪个是最好的 Mac 数据恢复软件&#xff1f;不用担心。本文列出了 5 款 Mac 数据恢复软件&#xff0c;可帮助您在 Mac OS 下恢复丢失的…

C++程序设计-第六/七/八章 运算符重载/包含与继承/虚函数和多态性【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下C程序设计中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门&#xff1a; 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函…

OpenResty使用Lua大全(三)OpenResty使用Json模块解析json

文章目录 系列文章索引一、使用Json模块1、引入cjson模块2、table转json字符串3、json字符串转table4、异常处理&#xff08;1&#xff09;异常复现&#xff08;2&#xff09;使用pcall命令&#xff08;3&#xff09;cjson.safe 模块 5、空table返回object还是array 系列文章索…

STM32串口通信—串口的接收和发送详解

目录 前言&#xff1a; STM32串口通信基础知识&#xff1a; 1&#xff0c;STM32里的串口通信 2&#xff0c;串口的发送和接收 串口发送&#xff1a; 串口接收&#xff1a; 串口在STM32中的配置&#xff1a; 1. RCC开启USART、串口TX/RX所对应的GPIO口 2. 初始化GPIO口 …

精品基于Uniapp+ssm英语学习交流平台小程序打卡计划备忘录

《[含文档PPT源码等]精品微信小程序基于Uniappssm英语学习交流平台小程序》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框…

Linux_网络项目_WEB服务器 处理服务器写入失败后sigpipe信号导致服务器崩溃退出问题,引入线程池缓解大量请求,服务器组件化重构,在线计算机业务测试

文章目录 1. 处理服务器写入管道出错2. 引入线程池缓解大量请求导致服务器崩溃设计线程任务类单例线程池组件设计 3.代码位置4. 在线计算机业务运行截图 1. 处理服务器写入管道出错 经过测试&#xff0c;服务器在读取报文时如果出错可以选择直接关闭这个TCP里链接来节省资源。…

【深度学习】YOLOv9继续训练——断点训练方法

YOLOv9继续训练主要分为两个情况&#xff1a; 其一、训练过程中意外中断&#xff0c;未完成训练预期的epoch数量&#xff1b; 其二、训练完了&#xff0c;但是未收敛&#xff0c;在这个基础上&#xff0c;还想用这个权重、学习率等参数继续训练多一些轮次 一、训练过程中意外…

PFA容量瓶volumetric flask应用研究分析

容量瓶是一个透明的长颈瓶&#xff0c;瓶体为梨形&#xff0c;便于摇荡液体和刷洗。每一个PFA容量瓶上的刻度线都是用千分之一的电子天平称量、标注&#xff0c;PFA容量瓶以其优异的耐化学腐蚀性和热稳定性&#xff0c;在实验室器皿中占有重要地位。随着科学技术的不断发展&…

腾讯云轻量应用服务器使用全攻略,都在这!

腾讯云轻量应用服务器怎么使用&#xff1f;轻量应用服务器使用包括快速创建轻量服务器、轻量服务器远程连接、使用轻量应用服务器搭建网站教程、轻量服务器开通端口教程等&#xff0c;腾讯云服务器网txyfwq.com整理了关于腾讯云轻量应用服务器的使用教程&#xff0c;目前轻量应…

【五、接口自动化测试】GET/POST 请求区别

大家好&#xff0c;我是山茶&#xff0c;一个探索AI 测试的程序员 在网上看到了许多关于post与get之间区别的帖子&#xff0c;也有很多帖子是直接粘贴复制的&#xff0c;甚至连标题、符号都没改&#xff0c;甚至还有很多争议 一、post、get 关于post与get之间区别&#xff0c;…