010. 递增子序列

news2024/9/21 4:29:33

1.题目链接:

491. 递增子序列

2.解题思路:

2.1.题目要求:

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 (数组可能有重复的元素,相等的元素排列也可以算递增)

示例 :

输入:nums = [4,4,3,2,1]
输出:[[4,4]]

注意:不可以排序,比如 上面如果排序就全是递增子序列了,像 [1,2,3,4,4 ] 就全是递增子序列,但上面返回的只有 [ 4,4 ] ,说明题目要求要原生态的递增子序列,不能排序 。

2.2.思路:

for + 递归 构建 N叉树,用一个path 去记录每次递归的结果,然后每次元素个数大于 2 个就把path输入结果集。

同时在单层搜索的逻辑中,需要判断 遍历位置的 num [ i ] 是否 大于等于 path的末尾值,同时在树层递归中需要判断选择的 num[ i ] 有没有被重复使用,重复使用的话跳过,这样来满足题目条件

N叉树流程如下:

2.3.回溯三部曲:

2.3.1.确定回溯函数参数

元素不能重复使用,所以需要startIndex,调整下一层递归的起始位置。

代码如下:

vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums, int startIndex)

2.3.2.确定终止条件

 不加 >= 的逻辑也行,for 循环完成,函数会自然的结束,不过加上可能会方便理解点

同时在这里 path.size() > 2 需要输入 path 到 result 里。

代码如下:

if (startIndex >= nums.size()) {
    return;
}

if (path.size() > 1) {
    result.push_back(path);
    // 注意这里不要加return,因为要取树上的所有节点
}

2.3.3.确定单层遍历逻辑

这一部分,在搜集结果的同时,还需要排除 树层中重复的数不能变成递增子序列的情况,

注意:uset每次都是新定义的,所以不需要回溯。

代码如下:

unordered_set<int> uset; // 使用set来对本层元素进行去重
for (int i = startIndex; i < nums.size(); i++) {
    if ((!path.empty() && nums[i] < path.back())//path为空不进行判断
            || uset.find(nums[i]) != uset.end()) {
            continue;
    }
    uset.insert(nums[i]); // 记录这个元素在本层用过了,本层后面不能再用了
    path.push_back(nums[i]);
    backtracking(nums, i + 1);
    path.pop_back();
}

2.4.总代码:

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(vector<int>& nums, int startIndex) {
        if (startIndex >= nums.size()) {
            return;
        }
    
        if (path.size() > 1) {
            result.push_back(path);
            // 注意这里不要加return,因为要取树上的所有节点
        }

        unordered_set<int> uset; // 使用set对本层元素进行去重
        for (int i = startIndex; i < nums.size(); i++) {
            if ((!path.empty() && nums[i] < path.back())
                    || uset.find(nums[i]) != uset.end()) {
                    continue;
            }
            uset.insert(nums[i]); // 记录这个元素在本层用过了,本层后面不能再用了
            path.push_back(nums[i]);
            backtracking(nums, i + 1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        result.clear();
        path.clear();
        backtracking(nums, 0);
        return result;
    }
};

3.遇见的问题:

Set 中查找一个元素(不明白干嘛要!= c.end( )...)

Set<int> c;
int target = 163;
if (c.find(target) != c.end())
{
// find the target
}

unordered_set,无序set?

不知道

突然树层为什么不能重复选没想清楚

答:像 [1,1,3,2,1]  可能会出现 [1,3] [1,3] 的情况,分别是第一个 1 和 第二个 1 。

4.记录:

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

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

相关文章

IDOC的状态

这篇文章介绍IDOC Status的概念和它们的用途&#xff0c;明确IDOC status的类别&#xff0c;看一下完整的状态列表&#xff0c;包括INBOUND和OUTBOUND&#xff0c;还有入站和出站iDoc处理时iDoc状态的顺序。 另外还有监控SAP IDOC status的工具&#xff0c;比如AIF&#xff0c;…

推特营销引流入门指南

一、关注 当您关注另一个Twitter用户时&#xff0c;您进行订阅&#xff0c;即可立即阅读其内容分享。因此&#xff0c;请评估您关注的人&#xff0c;尤其是刚开始时。跟踪新用户的一种简单方法是找到他们的个人资料&#xff0c;然后单击“关注”按钮。 Twitter对于那些疯狂点…

机器学习笔记之受限玻尔兹曼机(三)推断任务

机器学习笔记之受限玻尔兹曼机——推断任务引言回顾&#xff1a;受限玻尔兹曼机的模型表示推断任务求解——后验概率(posterior)基于隐变量的后验概率求解基于观测变量的后验概率求解受限玻尔兹曼机与神经网络的联系引言 上一节介绍了受限玻尔兹曼机的模型表示(Representation…

C++图书管理系统(管理员-读者)

C图书管理系统&#xff08;管理员-读者&#xff09; 一、设计一款文字式交互的图书管理系统&#xff0c;要求具备注册登录、浏览图书、借还图书等基本功能&#xff1b; 二、要求以外部文件的形式存储书籍信息、馆藏记录、借阅记录、用户信息等。【可参考提供的书籍清单】 三…

如何批量查询搜狗收录?提升搜狗收录8个方法介绍

如何批量查询搜狗收录? 批量查询搜狗收录的具体流程如下&#xff1a; 1、打开站长工具 2、在域名输入框添加需要查询的域名 3、在功能选择区勾选需要查询的功能&#xff08;这里勾选搜狗是否收录&#xff0c;搜狗收录总数&#xff09; 4、提交查询&#xff0c;等待查询结果 …

Android样式和主题背景

简介&#xff1a; 本文将简单介绍Android样式与主题背景的相关内容 文章目录前言一、样式二、主题背景三、样式层次结构四、创建并应用样式五、自定义默认主题六、添加特定于版本的样式七、常见的主题风格总结前言 借助 Android 中的样式和主题背景&#xff0c;我们可以将应用…

十五管还原炉舟皿自动卸料单元

目  录 摘要 Ⅰ 1 绪论 1 1.1 十五管还原炉舟皿产生和发展 1 1.2十五管还原炉舟皿的今天与明天 2 2 总体方案设计 4 2&#xff0e;1自动卸料单元的作用 4 2&#xff0e;2十五管还原炉舟皿自动卸料单元结构的选择 4 2&#xff0e;3设计技术参数: 7 2&#xff0e;4 自动卸料单元…

Python实现基于物品的协同过滤推荐算法构建电影推荐系统

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 基于物品的协同过滤推荐&#xff08;Item-based CF&#xff09;的假设原理为&#xff1a;跟你喜欢的东西…

python的数据可视化

python画图1.使用pyecharts画图1.1 画地图1.1.1 画2D中国地图1.1.2 画2D世界地图1.1.3 画3D世界地图1.2 pyecharts的三种图片渲染工具1.2.1 snapshot_selenium1.2.2 snapshot_phantomjs1.2.3 snapshot_pyppeteer1.3 词云图1.3.1依据图片渲染出指定形状的词云图1.3.2渲染出指定大…

基于Android的学生信息管理App设计(Android studio开发)

目 录 一、 题目选择&#xff08;题目、选题意义&#xff09; 3 二、 设计目的 3 1、 初衷 3 2、 结合实际 3 3、 使用工具 3 三、 最终页面效果展示 4 1、 登陆界面 4 2、 主界面 5 3、 各个功能模块 6 四、 各部分设计 11 1、活动页面Activity布局文件 11 2、Activity的编程 …

基于JSP网上书城的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Figma UI UX设计教程

Figma UI UX设计教程 使用 Figma 获得 UI 设计、用户界面、用户体验设计、UX 设计和网页设计方面的工作 课程英文名&#xff1a;Figma UI UX Design Essentials 此视频教程共10.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附件全 下载地址 课…

毕业设计-基于机器视觉的行人车辆跟踪出入双向检测计数

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

网格化微型空气质量站 浅谈工作原理

产品简介 网格化微型空气质量站是一种集数据采集、存储、传输和管理于一体的无人值守的环境监测系统&#xff0c;能全天候、连续、自动地监测环境&#xff0c;在提供PM10、PM2.5、 SO2、 NO2、CO、O3等参数数据的基础上&#xff0c;可扩展对VOCs、氯气、硫化氢、氨气等多种特征…

[附源码]Python计算机毕业设计Django勤工俭学管理小程序

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Nginx的常用命令和配置文件

常用命令 1.查看 nginx版本号 在/usr/local/nginx/sbin 目录下执行 ./nginx -v 2.启动命令 在/usr/local/nginx/sbin 目录下执行 ./nginx 3.关闭命令 在/usr/local/nginx/sbin 目录下执行 ./nginx -s stop 4.重新加载命令 在/usr/local/nginx/sbin 目录下执行 ./nginx …

主流时序数据库分析及选型

目录一、当前主流的时序数据库二、主流时序数据库分析1、[Influxdb](https://docs.influxdata.com/influxdb)2、[Timescale](https://docs.timescale.com/)3、[Apache Druid](https://druid.apache.org/docs/latest/design/index.html)4、[Kdb](https://code.kx.com/home/)5、[…

牛客网基础知识强化巩固-周结04

链表强化训练 2022-11-28 打卡 知识点总结 磁盘字节和比特的问题 文件分配表FAT是管理磁盘空间的一种数据结构&#xff0c;用在以链接方式存储文件的系统中记录磁盘分配和跟踪空白磁盘块。整个磁盘仅设一张FAT表&#xff0c;其结构如下图所示。如果文件块号为2&#xff0c;查找…

使用 Echarts 插件实现柱状图功能

目录前言&#xff1a;什么是 Echarts 插件柱状图成品展示步骤&#xff1a;柱状图代码&#xff1a;总结&#xff1a;前言&#xff1a; 大家都知道&#xff0c;一般情况下&#xff0c;想要使用前端设置一个 柱状图 需要使用 canvas 画布进行编写&#xff0c;不仅代码多&#xff…

Python实现基于用户的协同过滤推荐算法构建电影推荐系统

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 基于用户的协同过滤推荐&#xff08;User-based CF&#xff09;的原理假设&#xff1a;跟你喜好相似的人…