给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。
如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。
进阶:很容易想到时间复杂度为 O(n^2) 的解决方案,你可以设计一个时间复杂度为 O(n logn) 或 O(n) 的解决方案吗?
示例 1:
输入:nums = [1,2,3,4]
输出:false
解释:序列中不存在 132 模式的子序列。
代码
class Solution {public boolean find132pattern(int[] nums) {Stack<Integer> stack = new Stack<>();int sec=Integer.MIN_VALUE;for(int i=nums.length-1;i>=0;i--){if(nums[i]<sec)return true;while (!stack.isEmpty()&&nums[i]>stack.peek()){sec=stack.pop();}stack.push(nums[i]);}return false;}
}