当前位置: 首页 > news >正文

LeetCode题练习与总结:132 模式--456

一、题目描述

给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。

如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。

示例 1:

输入:nums = [1,2,3,4]
输出:false
解释:序列中不存在 132 模式的子序列。

示例 2:

输入:nums = [3,1,4,2]
输出:true
解释:序列中有 1 个 132 模式的子序列: [1, 4, 2] 。

示例 3:

输入:nums = [-1,3,2,0]
输出:true
解释:序列中有 3 个 132 模式的的子序列:[-1, 3, 2]、[-1, 3, 0] 和 [-1, 2, 0] 。

提示:

  • n == nums.length
  • 1 <= n <= 2 * 10^5
  • -10^9 <= nums[i] <= 10^9

二、解题思路

要解决这个问题,我们可以使用一个单调栈来帮助我们找到满足132模式的子序列。以下是解题思路:

  1. 从后向前遍历数组,维护一个单调递减栈,栈中存储的是数组元素的索引。
  2. 使用一个变量third来记录当前遍历到的元素作为nums[k]时,所有可能的nums[i]中的最大值。
  3. 当遍历到一个元素nums[j]时,如果third不为空且nums[j] > third,则说明找到了一个满足条件的子序列,返回true
  4. 如果当前元素nums[j]小于栈顶元素对应的值,则将栈顶元素弹出,并更新third为弹出的元素值,因为此时弹出的元素可以作为nums[k],而nums[j]可以作为nums[j],我们记录下nums[k]中的最大值作为third
  5. 将当前元素的索引压入栈中。
  6. 如果遍历完数组仍未找到满足条件的子序列,则返回false

三、具体代码

class Solution {public boolean find132pattern(int[] nums) {if (nums == null || nums.length < 3) {return false;}// 单调栈,存储的是元素的索引Stack<Integer> stack = new Stack<>();// third变量记录所有可能的nums[i]中的最大值int third = Integer.MIN_VALUE;// 从后向前遍历数组for (int i = nums.length - 1; i >= 0; i--) {// 如果当前元素小于third,说明找到了132模式if (nums[i] < third) {return true;}// 当栈不为空且当前元素大于栈顶元素时,更新thirdwhile (!stack.isEmpty() && nums[i] > nums[stack.peek()]) {third = nums[stack.pop()];}// 将当前元素的索引压入栈中stack.push(i);}// 如果遍历完数组仍未找到满足条件的子序列,则返回falsereturn false;}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 遍历数组:我们使用了一个for循环来遍历数组中的每个元素,这个操作的时间复杂度是O(n),其中n是数组的长度。
  • 栈操作:在每次遍历中,每个元素最多只会被压入栈一次,并且最多也只会被弹出一次。因此,整个数组遍历过程中,每个元素最多只会经过栈两次(一次入栈,一次出栈),这意味着栈相关的操作的总时间复杂度也是O(n)。

由于这两个操作是顺序执行的(遍历数组和栈操作是同时进行的),所以总的时间复杂度是O(n)。

2. 空间复杂度
  • 栈空间:在最坏的情况下,如果数组是单调递增的,那么所有元素都会被压入栈中。因此,栈的空间复杂度是O(n),其中n是数组的长度。
  • 辅助空间:除了栈之外,我们只使用了一个额外的变量third来存储中间值,这个变量占用的空间是常数级的,即O(1)。

因此,总的空间复杂度是O(n),由栈的大小决定。

五、总结知识点

  • 数组遍历

    • 使用for循环从后向前遍历数组,这是为了能够利用栈来维护一个单调递减的序列。
  • 栈(Stack)的使用

    • 使用Java的Stack类来存储数组元素的索引,栈在这里用于维护一个单调递减的序列,帮助我们找到可能的nums[k]
  • 条件判断

    • 使用if语句来判断是否找到了132模式的子序列。
    • 使用while循环来处理栈中元素,当栈不为空且当前元素大于栈顶元素时,更新third变量。
  • 最小值初始化

    • 使用Integer.MIN_VALUE来初始化third变量,确保在比较时能够正确地更新third为更大的值。
  • 栈的基本操作

    • push():将元素压入栈中。
    • pop():从栈中弹出元素。
    • peek():查看栈顶元素而不弹出。
  • 返回值

    • 方法返回一个布尔值,表示是否找到了132模式的子序列。
  • 边界条件检查

    • 在方法开始时检查输入数组是否为空或长度小于3,因为至少需要3个元素才能形成132模式。
  • 整数比较

    • 在代码中多次进行了整数比较,这是基本的编程操作。
  • 逻辑推理

    • 整个算法的设计基于对132模式的理解,以及如何通过栈来维护一个潜在的有效序列,这是算法的核心。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

相关文章:

LeetCode题练习与总结:132 模式--456

一、题目描述 给你一个整数数组 nums &#xff0c;数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成&#xff0c;并同时满足&#xff1a;i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列 &a…...

IdentityServer4框架、ASP.NET core Identity

OAuth2.0 IdentityServer4 官网 中文官网 ASP.NET Core Identity提供了一个用来管理和存储用户账户的框架. IdentityServer4是基于ASP.NET Core实现的认证和授权框架&#xff0c;是对OpenID Connect和OAuth 2.0协议的实现。 IdentityServer是一个中间件,它可以添加符合OpenID…...

【分子材料发现】——GAP:催化过程中吸附构型的多模态语言和图学习(数据集处理详解)(二)

Multimodal Language and Graph Learning of Adsorption Configuration in Catalysis https://arxiv.org/abs/2401.07408Paper Data: https://doi.org/10.6084/m9.figshare.27208356.v2 1 Dataset CatBERTa训练的文本字符串输入来源于Open Catalyst 2020 &#xff08;OC20…...

SpringBoot开发过程中经常遇到问题解决方案分享

目录 1. Spring Boot应用启动缓慢 2. 数据库连接池配置问题 3. Spring Boot应用无法连接外部服务 4. 配置文件读取不生效 5. Spring Boot应用的日志输出不完整 6. Spring Boot中的Transactional事务管理问题 1. Spring Boot应用启动缓慢 问题原因&#xff1a; Spring Boo…...

AR眼镜_消费级工业AR智能眼镜主板硬件解决方案

AR眼镜的研发是一项复杂的软硬件集成工程&#xff0c;它需要在摄影、音频、交互和连接等多个方面提供卓越的基础体验&#xff0c;因此产品的每个细节都显得尤为重要。 在设计AR眼镜时&#xff0c;重量、体积和散热性能都是必须认真考量的关键因素。在芯片平台的选择上&#xff…...

Springboot 核心注解

Spring Boot 是一个基于 Spring 框架的扩展&#xff0c;旨在简化新 Spring 应用的初始搭建以及开发过程。它通过自动配置和约定优于配置的原则&#xff0c;减少了开发者的工作量。Spring Boot 提供了一组核心注解和 Starter 依赖管理工具来帮助开发者快速启动项目。 1. Spring…...

Nacos集群搭建【Oracle作外部数据源】

一、知识点分析 1.Nocas是什么&#xff1f; Nacos是一个动态服务发现、配置管理和服务管理平台‌。 1‌.1定义与背景‌&#xff1a; Nacos&#xff0c;全称为Dynamic Naming and Configuration Service&#xff0c;是由阿里巴巴开源的云原生应用配套工具。它旨在简化微服务架…...

云轴科技ZStack出席中国电信国际EMCP平台香港发布会,持续推动海外合作

近日&#xff0c;以“云聚未来 翼起新篇”为主题的中国电信国际多云服务一站式平台&#xff08;E-surfing Managed Cloud Platform&#xff0c;简称EMCP平台&#xff09;新闻发布会在香港成功举办&#xff0c;标志着中国电信国际在云计算服务领域取得了又一重大进展。云轴科技…...

爬虫自动化之drissionpage+SwitchyOmega实现随时切换代理ip

本文介绍了如何使用DrizzlePage进行爬虫自动化,并重点讲解了首次启动时设置代理IP以及通过SwitchyOmega插件实现随时切换代理IP的方法。 安装一次,后面调用就不会再去安装了 下载地址:https://github.com/FelisCatus/SwitchyOmega/releases 这两个文件随便那个都可以,下载…...

docker安装kettle(PDI)并实现web访问

我是MAC电脑M1版本&#xff0c;希望把软件交给docker进行管理&#xff0c;最近公司同事都通过kettle来实现外部数据对接&#xff0c;所以我本地也有安装kettle需求&#xff0c;在网上找到了这个解决方案操作很简单&#xff0c;但出现了无法访问的情况。我的排查方式是&#xff…...

[软件工程]十.可靠性工程(reliable engineering)

1.什么是可靠性工程 我们希望软件在给定的时间内&#xff0c;运行的时候不会崩溃或者发生失效&#xff0c;同时能保护我们的数据和个人信息。我们要能够信任我们所使用的软件&#xff0c;这意味着软件必须是可靠的。可靠性&#xff08;reliability&#xff09;&#xff1a;系统…...

【Makefile】编译日志之输出重定向符号 >

用法1 make all >& compilelog.txt make all > compilelog.txt这两个编译命令在功能上有一些细微的区别&#xff0c;主要在于标准输出和标准错误的处理方式。 make all >& compilelog.txt 这个命令会将标准输出&#xff08;stdout&#xff09;和标准错误&a…...

linux之less

less命令是Linux系统中一个功能强大的文件查看工具&#xff0c;它允许用户分页查看文件内容&#xff0c;并提供了多种快捷键和选项来增强用户体验。以下是less命令的一些常用操作&#xff1a; 基本使用 查看文件使用less命令的基本语法是less [选项] [文件名]。例如&#xff0…...

算法-字符串-165.比较版本号

一、题目 二、思路解析 1.思路&#xff1a; 比较的是两个版本号它们以“.”作为分割的部分的有效值&#xff08;即数值&#xff09;是否一致 2.常用方法&#xff1a; 1.s.split("\\规则")&#xff0c;将字符串按参数规则进行分割并存储在字符串数组中 String[] str …...

List与Set、数组与ArrayList、ArrayList与LinkedList的区别

List 与 Set 的区别&#xff1a; 项ListSet重复允许重复的对象&#xff08;多个null也可以&#xff09;不允许重复的对象&#xff08;null也只能有一个&#xff09;有序性有序的。 保持了每个元素的插入顺序。即输出顺序就是输入顺序。 有序和无序都有。 HashSet&#xff1a;无…...

如何在 Odoo18 视图中添加关联数据看板按钮 | 免费开源ERP实施诀窍

文 / 开源智造 Odoo亚太金牌服务 引言 关联数据看板按钮乃是 Odoo 当中的一项强效功能&#xff0c;它容许用户顺遂地访问相关记录&#xff0c;或者直接从模型的表单视图施行特定操作。它们为用户给予了对重要信息的疾速访问途径&#xff0c;并简化了工作流程&#xff0c;由此…...

Linux下mysql环境的搭建

1.mysql的下载 去MySQL官网下载mysql的linux压缩包 MySQL :: Download MySQL Community Server 如果下载慢请到网盘中自行下载 通过网盘分享的文件&#xff1a;mysql-8.0.40-1.el7.x86_64.rpm-bundle.tar 链接: https://pan.baidu.com/s/1vUJ-VuTwer1nLPT-haQCqw?pwd6342 提…...

视觉语言模型 Qwen2-VL

视觉语言模型 Qwen2-VL flyfish from PIL import Image import requests import torch from torchvision import io from typing import Dict from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor from modelscope import snapshot_dow…...

浅谈新能源汽车感应钥匙一键启动的步骤和特点

随着汽车智能化技术的发展&#xff0c;无钥匙启动系统还可以与其他智能系统进行集成&#xff0c;如智能车载系统、远程控制系统等。这使得车主可以通过智能手机等智能设备远程控制车辆的启动、解锁、上锁等操作&#xff0c;进一步提升了使用的便捷性和智能化水平‌。新能源汽车…...

鸿蒙ArkTS语言基础语法详解

文章目录 鸿蒙ArkTS语言基础语法详解一、引言二、ArkTS语言概述1. ArkTS语言特点2. TypeScript基础语法2.1 类型注解2.2 接口2.3 泛型2.4 类的继承2.5 类的访问修饰符 三、ArkTS的基本组成3.1 装饰器3.2 UI描述3.3 自定义组件3.4 系统组件3.5 属性方法和事件方法 四、自定义组件…...

H5游戏出海如何获得更多增长机会?

海外H5小游戏的崛起给了国内众多中小厂商出海发展的机会&#xff0c;开发者如何在海外市场获得更多的增长机会&#xff1f;#APP出海# H5游戏如何在海外获得核心用户&#xff1f; HTML5游戏的开发与运营者们首先可以利用量多质高的HTML5游戏&#xff0c;维持海外用户粘性&…...

Cmake+基础命令

一、版本要求&#xff1a; 检查 cmake 版本号的最低要求&#xff0c;不满足条件时报错。 cmake_minimum_required(VERSION <version>)参数&#xff1a; version&#xff1a;最低要求的版本号 例子&#xff1a; # 最低要求安装3.21版本的cmake cmake_minimum_required…...

python数据分析之爬虫基础:requests详解

1、requests基本使用 1.1、requests介绍 requests是python中一个常用于发送HTTP请求的第三方库&#xff0c;它极大地简化了web服务交互的过程。它是唯一的一个非转基因的python HTTP库&#xff0c;人类可以安全享用。 1.2、requests库的安装 pip install -i https://pypi.tu…...

PHP期末复习(通过30道填空题梳理知识点)

一、基本语法 PHP的开始标记是&#xff1a; <?php<?php 是PHP脚本的开始标签&#xff0c;所有PHP代码必须在这个标签内书写。 PHP文件的结束标记是&#xff1a; ?>?> 是PHP脚本的结束标签&#xff0c;在大多数PHP文件中&#xff0c;通常可以省略结束标记。 定…...

PostgreSQL 安装部署系列:使用YUM 方式在Centos 7.9 安装指定 PostgreSQL -15版本数据库

一、前言 千里之行始于足下&#xff0c;想学习一门数据库&#xff0c;首先要从安装部署开始&#xff0c;先拥有一套属于自己的学习测试库。为了更好的学习该数据库&#xff0c;可以选择一个在企业界使用率比较普及的操作系统&#xff0c;选择稳定版本的操作系统&#xff1b;如果…...

知识图谱8:深度学习各种小模型

1、知识图谱的展示有很多工具 Neo4j Browser - - - - 浏览器版本 Neo4j Desktop - - - - 桌面版本 graphX - - - - 可以集成到Neo4j Desktop Neo4j 提供的 Neo4j Bloom 是用户友好的可视化工具&#xff0c;适合非技术用户直观地浏览图数据。Cypher 是其核心查询语言&#xf…...

为什么 JavaScript 中的 `new` 运算符报错?

在 JavaScript 中&#xff0c;new 运算符通常用于创建一个新对象并调用构造函数来初始化对象。然而&#xff0c;new 运算符可能会引发一些错误&#xff0c;通常是由于以下原因导致的&#xff1a; 构造函数没有正确的定义&#xff1a; 如果使用 new 运算符调用的函数没有正确地定…...

Tomcat,javaweb, servlet , springBoot

在server.xml里配置服务器 <scope>provided</scope>打包的时候&#xff0c;这个jar包不会被打进去&#xff0c;因为tomcat已将封装了这个jar包&#xff0c;没必要要这个...

使用Kimi开发自己的问答应用

概述 Kimi是大家常用的一个人工智能助手&#xff0c;本文使用Kimi开发文档&#xff0c;以node作为后端&#xff0c;开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手&#xff0c;擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…...

TypeScript进阶

Typescript进阶 基础知识 JavaScript 的核心特点就是灵活&#xff0c;但随着项目规模的增大&#xff0c;灵活反而增加开发者的心智负担。例如在代码中一个变量可以被赋予字符串、布尔、数字、甚至是函数&#xff0c;这样就充满了不确定性。而且这些不确定性可能需要在代码运行…...

怎样安全做黑色彩票网站/台州关键词优化平台

服务器电源规范解析服务器的动力之源、稳定之源服务器电源有ATX电源和SSI电源两大类产品。ATX电源就是我们平常台式机使用的电源&#xff0c;在服务器领域这种电源主要被用在低端的塔式服务器及工作站上。而SSI电源则是Intel推出的一种服务器专用电源规范。台式PC电源的发展经过…...

唐山建设网站建站/seo关键词排名优化系统源码

超过70秒的请求是通过分析IIS日志发现的&#xff1a; 10.159.63.104是SLB的内网IP。 通过Wireshark抓包分析请求是9:22:21收到的(tcp.stream eq 23080)&#xff1a; 09:22:21.299838000 10.159.63.104 10.161.241.208 HTTP 291 GET /eastsea/p/3764040.html HTT…...

php网站源代码/企业营销策略有哪些

temp input(不妨想一想小甲鱼现在心里想的哪一个数字:) guess int(temp) if guess 8:print(你是小甲鱼心里的蛔虫吗&#xff1f;)print(哼&#xff0c;猜中了也没有奖励&#xff01;) else:if guess > 8:print(哥&#xff0c;大了大了...)else:print(嘿&#xff0c;小了小…...

外贸网站搭建一站式服务/百度app下载并安装最新版

这是一款三栏布局的网站使用。升级记录&#xff1a;2.1版&#xff1a;优化主题自带缩略图函数&#xff1b;增加主题配置页面安全验证&#xff1b;修复已知的用户反馈问题&#xff1b;-------------------------------2.0版&#xff1a;增加手机端侧栏模块显示开关&#xff1b;修…...

企业做门户网站的重要性/企业推广app

/* PID的参数设置可以参照以下来进行:   参数整定找最佳&#xff0c;从小到大顺序查;   先是比例后积分&#xff0c;最后再把微分加;   曲线振荡很频繁&#xff0c;比例度盘要放大;   曲线漂浮绕大湾&#xff0c;比例度盘往小扳;   曲线偏离回复慢&#xff0c;积分时…...

wordpress 底部小工具/百度指数的使用方法

支持基本的分区建立、删除、隐藏等操作。建立新分区时可指定详细参数&#xff1b; 支持ide、scsi、sata等各种类型的硬盘。支持u盘、usb硬盘、存储卡(闪存卡)&#xff1b; 支持fat12、fat16、fat32、ntfs文件系统&#xff1b; 可以快速格式化fat12、fat16、fat32、ntfs分区。格…...