LeetCode 456. 132 模式
题目描述
给你一个整数数组 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 模式的子序列。
来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
n == nums.length
1 <= n <= 2 * 105
-109 <= nums[i] <= 109
一、解题关键词
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
class Solution {
public boolean find132pattern(int[] nums) {
int len = nums.length;
//模拟
Map<Integer, Integer> map = new HashMap<>();
Deque<Integer> deque = new LinkedList<>();
deque.push(nums[len - 1]);
int maxK = Integer.MIN_VALUE;
for (int i = len - 2; i >= 0; i--) {
if (nums[i] < maxK) {
return true;
}
while (!deque.isEmpty() && nums[i] > deque.peek()) {
maxK = deque.pop();
}
if (nums[i] > maxK) {
deque.push(nums[i]);
}
}
return false;
}
}
方法二
class Solution {
public boolean find132pattern(int[] nums) {
int len = nums.length;
Deque<Integer> deque = new ArrayDeque<>();
int k = Integer.MIN_VALUE;
for(int i = len - 1; i >= 0;i--){
if(nums[i] < k){
return true;
}
while(!deque.isEmpty() && deque.peekLast() < nums[i]){
k = Math.max(k,deque.pollLast());
}
deque.addLast(nums[i]);
}
return false;
}
}
2.知识点
1、单调栈