1 解题思想
先占个坑,有答案,还没来得及仔细写
题目意思就是在数组里面找到一个i,j,k,使得对应位置的数字有:ai < ak < aj的关系,问存在与否
2 原题
Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that i < j < k and ai < ak < aj. Design an algorithm that takes a list of n numbers as input and checks whether there is a 132 pattern in the list.
Note: n will be less than 15,000.
Example 1:
Input: [1, 2, 3, 4]
Output: False
Explanation: There is no 132 pattern in the sequence.
Example 2:
Input: [3, 1, 4, 2]
Output: True
Explanation: There is a 132 pattern in the sequence: [1, 4, 2].
Example 3:
Input: [-1, 3, 2, 0]
Output: True
Explanation: There are three 132 patterns in the sequence: [-1, 3, 2], [-1, 3, 0] and [-1, 2, 0].
3 AC解
等待修改代码,这里是来自Discuss的
public class Solution {
public boolean find132pattern(int[] nums) {
Stack<Range> stack = new Stack<>();
for(int num : nums) {
Range cur = new Range(num, num);
while(!stack.isEmpty() && cur.max > stack.peek().min) {
cur.min = Math.min(stack.peek().min, cur.min);
cur.max = Math.max(stack.peek().max, cur.max);
stack.pop();
}
stack.push(cur);
if(stack.peek().min < num && num < stack.peek().max)
return true;
}
return false;
}
public static class Range {
public int min;
public int max;
public Range(int mn, int mx) {
min = mn;
max = mx;
}
}
}