給你一個整數數組 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;}
}