题目
给定一个整数序列:a1, a2, ..., an,一个 132 模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有 132 模式的子序列。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/132-pattern
代码
 public class DayCode {    public static void main(String[] args) {        int[] nums = new int[]{};        boolean ans = new DayCode().find132pattern(nums);        System.out.println(ans);    }
    /**     * 题目链接:https://leetcode-cn.com/problems/132-pattern/     * 时间复杂度 O(n)     * 空间复杂度 O(n)     *     * @param nums     * @return     */    public boolean find132pattern(int[] nums) {        boolean ans = false;        int n = nums.length;        if (n < 3) {            return ans;        }
        int[] minArr = new int[n];        minArr[0] = nums[0];        for (int i = 1; i < n; i++) {            minArr[i] = Math.min(minArr[i - 1], nums[i]);        }
        Stack<Integer> stack = new Stack<>();        for (int i = n - 1; i >= 0; i--) {            if (nums[i] > minArr[i]) {                while (!stack.isEmpty() && stack.peek() <= minArr[i]) {                    stack.pop();                }                if (!stack.isEmpty() && stack.peek() < nums[i]) {                    ans = true;                    return ans;                }                stack.push(nums[i]);            }        }        return ans;    }}
   复制代码
 
总结
评论