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

LeetCode——456. 132 模式

LeetCode——456. 132 模式

  • 问题描述
  • 示例
      • 示例 1
      • 示例 2
      • 示例 3
    • 提示
  • 解决方法
  • 代码实现
    • 暴力算法 O(n^3^)
    • 暴力算法 O(n^2^)
    • 单调栈O(n)

问题描述

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

解决方法

  这道题有两个方向,一是暴力求解,二是单调栈。

在leetcode上建议使用单调栈,暴力求解有个别用例会过不去。

代码实现

暴力算法 O(n3)

//暴力解法O(n^3)
bool find132pattern(int* nums, int numsSize) {if (numsSize < 3) {	//长度小于 3 无法构成return false;}for (int i = 0; i <= numsSize - 3; i++) {for (int j = i + 1; j <= numsSize - 2; j++) {for (int k = j + 1; k <= numsSize - 1; k++) {if (nums[i] < nums[k] && nums[k] < nums[j]) {return true;}}}}return false;
}

暴力算法 O(n2)

//暴力优化O(n^2)
bool find132pattern(int* nums, int numsSize) {if (numsSize < 3) {	//长度小于 3 无法构成return false;}for (int j = 1; j < numsSize - 1; j++) {int min = nums[0];for (int i = 1; i < j; i++) {if (nums[i] < min) {min = nums[i];		//j作为中间下标,找j左边最小,更容易满足条件}}for (int k = j + 1; k < numsSize; k++) {if (min < nums[k] && nums[k] < nums[j]) {return true;}}}return false;
}

单调栈O(n)

bool find132pattern(int* nums, int numsSize) {if (numsSize < 3) {return false;}int max_k = INT_MIN;	//存放k的最大值(初始化为最小值)int* stack = (int*)malloc(numsSize * sizeof(int));int top = -1;	//栈顶下标for (int i = numsSize; i >= 0; i--) {if (nums[i] < max_k) {free(stack);return true;}while (top >= 0 && nums[i] > stack[top]) {max_k = stack[top--];}stack[++top] = nums[i];}free(stack);return false;
}

  单调栈可能有点不好理解,下面将给出图例说明。

提示:

  • nums[i] = 1(模式中的"1")

  • max_k = 2(模式中的"2")

  • stack = {4}(模式中的"3")

在这里插入图片描述

http://www.dtcms.com/a/329201.html

相关文章:

  • 6 .循环-for
  • 高级项目——基于FPGA的串行FIR滤波器
  • Rust面试题及详细答案120道(01-10)-- 基础语法与数据类型
  • 日志数据链路的 “搬运工”:Flume 分布式采集的组件分工与原理
  • React常见的Hooks
  • 低成本扩展方案:S7-200SMART作为S7-1500分布式IO从站的上位机配置指南
  • 第三天-在DBC中创建一个Signal Group信号组
  • MySQL新增字段与Java实体不同步:常见问题排查与高效解决方案
  • 流处理 or 批处理?大数据架构还需要流批一体吗?
  • wangeditor v4修改缩进并清除粘贴文档带入的格式
  • MySQL极简安装挑战:从依赖管理到高效部署
  • MySQL数据线上扩容方案
  • npm安装时一直卡住的解决方法
  • Grayscale® 推出 Walrus 和 DeepBook 信托产品
  • 图像分类-动手学计算机视觉10
  • 解决:[64000][257] ORA-00257: 归档程序错误。只有在解析完成后才以 AS SYSDBA 方式连接问题
  • 面试实战 问题二十七 java 使用1.8新特性,判断空
  • 深入理解 uni-app 的 uni.createSelectorQuery()
  • SAP Valuation Category在制造业成本核算中的使用场景与配置方案
  • Easysearch 数据迁移之 INFINI Gateway
  • 云计算-OpenStack 运维开发实战:从 Restful API 到 Python SDK 全场景实现镜像上传、用户创建、云主机部署全流程
  • OpenBMC 中命令模式的深度解析:从原理到实现
  • Flink中的窗口
  • HTML5 Canvas实现数组时钟代码,适用于wordpress侧边栏显示
  • 用 mock 把 ES 单元测试@elastic/elasticsearch-mock 上手
  • PyTorch基础(使用TensorFlow架构)
  • Nginx的SSL通配符证书自动续期
  • Python(二):MacBook安装 Python并运行第一个 Python 程序
  • docker搭建java运行环境(java或者springboot)
  • 项目五算:估算、概算、预算、结算、决算