博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
132模式
阅读量:4614 次
发布时间:2019-06-09

本文共 1178 字,大约阅读时间需要 3 分钟。

2018-09-27 23:20:20

问题描述:

问题求解:

本题的难度还是有的,主要的考虑方向是尽量构造[min, max]来将后面出现的数字插入到其中。这里的求解方法是使用Stack来维护一组non-overlapping的区间,每次判断当前的数字能够加入到区间之中,如果可以,那么就直接返回true,如果不可以,那么就需要维护这个区间栈。这里有个地方需要注意到的是在栈顶的元素的左边界是到当前的为止的最小值,换句话说,Stack中的区间是按照左边界进行排序的。

public boolean find132pattern(int[] nums) {        Stack
stack = new Stack<>(); for (int i = 0; i < nums.length; i++) { if (stack.isEmpty() || stack.peek()[0] > nums[i]) stack.push(new int[]{nums[i], nums[i]}); // 这里不能直接写else目的是为了过滤掉和当前min相等的数字 else if (stack.peek()[0] < nums[i]) { if (stack.peek()[1] > nums[i]) return true; else { int[] last = stack.pop(); System.out.println(last[0] + " " + last[1]); if (last[1] > nums[i]) return true; last[1] = nums[i]; while (!stack.isEmpty() && stack.peek()[1] <= nums[i]) stack.pop(); if (!stack.isEmpty() && stack.peek()[0] < nums[i]) return true; stack.push(last); } } } return false; }

 

转载于:https://www.cnblogs.com/TIMHY/p/9716287.html

你可能感兴趣的文章
Chapter 4 Syntax Analysis
查看>>
Java3D实例应用-载入3ds 模型
查看>>
872. Leaf-Similar Trees
查看>>
PHPer未来路在何方...
查看>>
【转帖】浅析和介绍如何在delphi中定位要分析的函数
查看>>
二年级四则运算扩展
查看>>
lnmp编译安装
查看>>
版本控制:git
查看>>
4寸大屏智能手机超值购,更有千元话费等你拿
查看>>
windows配置Scrapy爬虫框架
查看>>
python - 代码缩进
查看>>
maven06-----maven生命周期和插件
查看>>
Java并发编程:并发容器之ConcurrentHashMap
查看>>
Linux中配置别名
查看>>
UIViewCotroller 的生命周期函数
查看>>
【安卓进阶】Scroller理解与应用
查看>>
iOS设备通知中心精品推荐消息删除
查看>>
Table排序
查看>>
K先生的博客
查看>>
intellij idea
查看>>