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;
}
}
}
本文介绍了一种检测数组中是否存在132模式的算法。该算法通过使用栈结构存储区间范围来判断输入序列是否包含形如ai<ak<aj且i<j<k的元素组合。文中提供了具体的实现代码,并通过实例展示了算法的应用。
350

被折叠的 条评论
为什么被折叠?



