美文网首页
栈-N456-132模式

栈-N456-132模式

作者: 三次元蚂蚁 | 来源:发表于2019-08-11 17:34 被阅读0次

题目

  • 概述:给定一个整数数组,判断该数组里是否有满足132模式的序列(132模式:序列中的第一个数 < 序列中的第三个数 < 序列中的第二个数)

  • 输入:整数数组,长度范围[0, 15000)

  • 输出:存在132模式的序列返回true,反之返回false

  • 出处:https://leetcode-cn.com/problems/132-pattern/

思路

  • 分解为两个问题:
    1. 寻找逆序对
    2. 逆序对的后一个元素大于从第一个元素到逆序对前一个元素的最小值
  • 遍历整个数组,记录第一个元素到每个元素(不包括)之间的最小值下标Min,同时记录每个元素和之前能和其构成逆序对的元素(最近的一个)下标Rev
  • 记数组为A,当前遍历元素下标为p,上一个遍历元素下标为pBef
    1. A[pBef] == A[p] => NEXT
    2. A[pBef] > A[p] => A[p] > A[Min[pBef]] ? END : NEXT
    3. A[pBef] < A[p] => pBef = Rev[pBef]

代码

class Solution {
    public boolean find132pattern(int[] nums) {
        if (nums == null) {
            return false;
        }
        
        int len = nums.length;
        if (len < 3) {
            return false;
        }
        
        int[] Min = new int[len];
        int[] Rev = new int[len];
        Min[0] = 0;
        Rev[0] = -1;
        
        for (int i = 1, j = i - 1; i < len; ++i) {
            j = i - 1;
            while (j >= 0) {
                if (nums[j] == nums[i]) {
                    Rev[i] = Rev[j];
                    break;
                } else if (nums[j] > nums[i]) {
                    if (nums[i] > nums[Min[j]]) {
                        return true;
                    } else {
                        Rev[i] = j;
                        break;
                    }
                } else {
                    j = Rev[j];
                }
            }
            if (j < 0) {
                Rev[i] = -1;
            }
            Min[i] = nums[i - 1] > nums[Min[i - 1]] ? Min[i - 1] : i - 1; 
        }
        
        return false;
    }
}

相关文章

  • 栈-N456-132模式

    题目 概述:给定一个整数数组,判断该数组里是否有满足132模式的序列(132模式:序列中的第一个数 < 序列中的第...

  • Android知识回顾

    Android的启动模式 standard:标准模式 singleTop:栈顶复用模式 singleTask:栈内...

  • Android 启动模式

    四种启动模式 standard(标准模式) singleTop(栈顶复用模式) singleTask(栈内复用模式...

  • Activity启动模式

    Activity启动模式 singlTop 栈顶复用模式 singleTask 栈内复用模式 Activity的F...

  • Activity的启动模式

    Android的Activity'启动模式有标准模式、栈顶复原模式、栈内复用模式和单例模式。标准模式是默认模式,每...

  • Activity的四种启动模式

    Activity的四种启动模式 标准模式:standard 栈顶复用模式:singleTop 栈内复用模式:sin...

  • Activity的启动模式

    启动模式介绍、任务栈 1.1 启动模式介绍 1.2 任务栈 四种启动模式 2.1 standard模式 2.1 s...

  • Android Activity栈相关

    singleTop 模式 又称栈顶复用模式,顾名思义,在这种模式下,如果有新的Activity已经存在任务栈的栈顶...

  • Activity的启动模式

    activity有四种静态启动模式,分别是:默认启动模式standard;栈顶复用模式singleTop;栈内复用...

  • JS执行模式

    同步执行模式-调用栈 工作表(通俗说法)押入栈 弹出 时间太长 =》 阻塞 =〉异步模式 异步执行模式:不会等待这...

网友评论

      本文标题:栈-N456-132模式

      本文链接:https://www.haomeiwen.com/subject/nxusjctx.html