//方法有很多,最简单的办法是三层循环,但是时间复杂度过高,
//使用栈的方法,先将数组预处理,选出前m个中最小的值,倒序选出k的值,如果比最小的值还小,不满足规则,出栈。如果比它大,只需要比较j和k的值,只要满足规则,即返回true
package dian;
import java.util.Scanner;import java.util.Stack;
public class SumStack {
public static void main(String[] args) {
int [] nums= {15,12,3,4,11,2,7,6};
System.out.println( find132pattern(nums));
}
public static boolean find132pattern(int[] nums) {
//如果传入的数组小于3个,就返回false
if (nums.length < 3)
return false;
//定义一个栈储存数据
Stack < Integer > stack = new Stack < Integer> ();
int[] min = new int[nums.length];
min[0] = nums[0];
for (int i = 1; i < nums.length; i++)
min[i] = Math.min(min[i - 1], nums[i]);
for (int i = 0; i < nums.length; i++)
System.out.println(min[i]);
for (int j = nums.length - 1; j >= 0; j--) {
//先进行j值与i值相比
if (nums[j] > min[j]) {
//进行k值与i值相比
while (!stack.isEmpty() && stack.peek() <= min[j])stack.pop();
//此时栈不为空,j与k值再比较
if (!stack.isEmpty() && stack.peek() < nums[j])return true;
stack.push(nums[j]);
}
}
return false;
}
}