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.设计 ...
随机推荐
- java.util.logging.Logger基础
1. 定义 java.util.logging.Logger是Java自带的日志类,可以记录程序运行中所产生的日志.通过查看所产生的日志文件,可以分析程序的运行状况,出现异常时,分析及定位异常. 2. ...
- 使用exe4j工具制作简单的java应用程序
首先需要下载exe4j工具并进行安装,下面是利用exe4j工具制作应用程序的步骤. 1.首先将工程导出为可运行的jar包,选择extract required libralies into gener ...
- BZOJ 3624: [Apio2008]免费道路 [生成树 并查集]
题意: 一张图0,1两种边,构造一个恰有k条0边的生成树 优先选择1边构造生成树,看看0边是否小于k 然后保留这些0边,补齐k条,再加1边一定能构成生成树 类似kruskal的证明 #include ...
- BZOJ 3091: 城市旅行 [LCT splay 期望]
3091: 城市旅行 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1454 Solved: 483[Submit][Status][Discuss ...
- ArcGIS API for JavaScript开发环境搭建与发布以及基本功能实现
1.背景介绍 ArcGIS API for JavaScript 咱这就不介绍了,具体可看ESRI中国的介绍:http://support.esrichina.com.cn/2011/0223/960 ...
- OpenLayer3调用天地图,拖拽后,地图消失的问题[已解决]
拖拽后,地图直接消失了,而且右上角的坐标变成了NaN,NaN 后来经过测试发现,原来是自己封装有问题,坐标点一定要用parseFloat()转换下,但不清楚为什么页面刚开始加载的时候没有问题,总之能解 ...
- jq实现碰到边缘反弹的动画
先上效果图: 录出来有点卡顿的赶脚,实际上还是挺顺畅的. 1.HTML: <div class="box"></div> 2.CSS: body{ back ...
- Struts2 中添加 Servlet
Struts2中如何添加Servlet 以前Java开发都是Servlet的天下,如今是各种框架横行,遇到一个需要将以前的Servlet加入到现有的Struts2的环境中. Google之后发现Sta ...
- 浅学vue
因之前项目接触了vue,从此我被迷住,简洁而不失优雅,小巧而不乏大匠. 首先我们要了解vue,什么是vue,正如官网所说:Vue.js 是一套构建用户界面的渐进式框架,Vue 的核心库只关注视图层.V ...
- PHP中cookies跨目录无法调用解决办法
localhost/a/test.php 中写入: <?php setcookie("user","zhangsan",time()+3600); ?&g ...