题目要求:
在一个数组中查找三个数,要求这三个数呈[1,3,2]的大小排列。也就是说,这三个数第一个数是最小值,中间的数是最大值,最后一个数是中间值。要注意的是这三个数字在原数组中不一定要是紧紧相邻的,中间可以相隔很多数字。
思路:
创建一个stack来存储一个从顶到低依次上升的数列,这就是可能成为[3]对应数的数字。
变量middle:用于存储中间值,每次都要随着loop跟数组上的数字比较,如果数字比middle还小,说明已经找到了[1,3,2]数组。
遍历的nums[i]:我们期盼它成为三个数字中最小的那个。
public boolean find132pattern(int[] nums) {
int middle = Integer.MIN_VALUE;
Stack <Integer> stack = new Stack <> ();
for(int i = nums.length - 1; i >= 0; i--){
if(nums[i] < middle) return true;
while(!stack.isEmpty() &&
nums[i] > stack.peek()){
middle = stack.pop();
}
stack.push(nums[i]);
}
return false;
}
这道题太难了。。。