LeetCode 456. 132 Pattern
问题描述
给一组数,判断这组数中是否含有132 pattern。
132 pattern: i < j < k, 且 ai < ak < aj
第一种解法
使用栈来保存候选的子区间,不断地判断新元素是否落在栈顶的区间内,这其中需要一些判断。
class Solution
{
public:
bool find132pattern(vector<int>& nums)
{
int n = nums.size();
stack<pair<int,int>> minmax;
for (int i = ; i < n; i++)
{
if (minmax.empty() || nums[i] < minmax.top().first)
minmax.push(pair<int, int>(nums[i], nums[i]));
else if (nums[i] > minmax.top().first)
{
pair<int, int> cur = minmax.top();
minmax.pop();
if (nums[i] < cur.second)
return true;
else
{
cur.second = nums[i];
// 如果当前元素已经比stack的top的max还大,那么top已经没有存在的意义了,因为当cur的min一定是小于top的min的,是包含关系
while (!minmax.empty() && nums[i] > minmax.top().second)
minmax.pop();
// 判断当前元素是否在top的区间中
if (!minmax.empty() && nums[i] > minmax.top().first)
return true;
}
minmax.push(cur);
}
}
return false;
}
};
第二种解法
设132分别为 s1, s2, s3,且满足, s1<s3<s2。
则这个方法是每次找到符合条件的s3,即右侧有比它小的元素,然后判断下一个数是否比s3小,如果存在,则返回true。
class Solution {
public:
bool find132pattern(vector<int>& nums) {
int n = nums.size();
int s3 = INT32_MIN;
// s1 < s3 < s2, sequence: s1, s2, s3
stack<int> s2;
for (int i = n-; i >= ; i--)
{
if (nums[i] < s3)
return true;
else while (!s2.empty() && nums[i] > s2.top()) // top is candidate for s3
{
s3 = s2.top();
s2.pop();
}
s2.push(nums[i]);
}
return false;
}
};
LeetCode 456. 132 Pattern的更多相关文章
- [leetcode] 456. 132 Pattern (Medium)
对一个三个元素以上的数组,如果存在1-3-2模式的组合,则返回true. 1-3-2模式就是值的排序是i<k<j但是下标排序是i<j<k. 解法一: 硬解,利用一个变量存储是否 ...
- 【LeetCode】456. 132 Pattern 解题报告(Python)
[LeetCode]456. 132 Pattern 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fu ...
- 456. 132 Pattern
456. 132 Pattern Given an array of integers a1, a2, a3-an, judge if there exists the 132 pattern. 13 ...
- 【LeetCode】456. 132 Pattern
Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that ...
- LC 456. 132 Pattern
Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that ...
- Java实现 LeetCode 456 132模式
456. 132模式 给定一个整数序列:a1, a2, -, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj ...
- LeetCode——456.132模式
给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj.设计一个算法,当 ...
- 456 132 Pattern 132模式
给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj.设计一个算法,当 ...
- Leetcode 456.132模式
132模式 给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj.设计 ...
随机推荐
- 洛谷 [P1118] IOI1994 数字三角形
简单dfs 我们注意到,题目中的运算方式与杨辉三角极其相似,所以说本题实际上是一道加权的杨辉三角,搜索系数 #include <iostream> #include <cstdio& ...
- POJ1743 Musical Theme [后缀自动机]
题意:不重叠最长重复子串 后缀数组做法:http://www.cnblogs.com/candy99/p/6227659.html 后缀自动机的话,首先|Right|>=2 然后min(t[u] ...
- 关于HTML文档的文档模式
HTML文档的文档模式包括混杂模式和标准模式,这两种模式主要影响CSS内容的呈现,但在某些情况下也会影响到JavaScript的解释执行. 如果在文档开始处没有发现文档类型声明,则所有浏览器都会默认开 ...
- 代码从stepping stone搬移到内存
为什么要搬移代码?如何搬移代码?arm启动流程回顾:2440:这里我们分析的是从nand flash 启动.2440的启动主要依赖于一个部件(SRAM),又名stepping stone.它的地址为0 ...
- 分布式服务dubbo使用
SOA 服务框架dubbo 节点角色说明: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: ...
- Hibernate学习(一)创建数据表
(1)生成数据库表的创建: // 默认读取hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); // 生成并 ...
- Ansible自动化运维笔记2(Ansible的组件介绍)
1.Ansible Inventory (1)静态主机文件 默认的ansible invetory是/etc/hosts文件,可以通过ANSIBLE_HOSTS环境变量或者通过运行命令的时候加上-i ...
- Five nines
Five nines, commonly taken to mean "99.999%", may refer to: 高可用 High availability of serv ...
- (转载)windows下mysql忘记密码
Mysql版本:5.1 1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令: net stop mysql 打开第一个cmd窗口,切换到mysql的bin目录 ...
- c#获取文件MD5算法
//获取文件MD5算法 private static string GetMD5FromFile(string fileName) { try { FileStream file = new File ...