2017.9.11
思路写在了代码的注释里。
public class Solution {
/*
* @param nums: a list of n integers
* @return: true if there is a 132 pattern or false
*/
public static boolean find132pattern(int[] nums) {
// write your code here
int size = nums.length;
if(size <=2){
return false;
}
int min1 = nums[0];
//14842,14838,14840,14836,14838,14834,14836,14832,14834,14830,14832,14835
int m = 0;
int n = -2;
int k = -3;
while(m < size-1){
// 这里m 找到了一个当前最小的值
while(m < size-1 && nums[m+1] <= nums[m]){
m++;
}
n = m+1;
// 在m之后需要寻找一个大于nums[m]的最大数
while(n < size-1 && nums[n] <= nums[n+1]){
n++;
}
k = n+1;
// 在k之后,需要找到一个 大于nums[m]且小于nums[n]的数
while(k < size){
if(nums[k] > nums[m] && nums[k] < nums[n]){
return true;
}
k++;
}
//nums[m]中保存的是当前的最小值,nums[n]中保存的是当前最大的值。
// 如果找不到介于二者之间的数,那么从nums[n]之后,再重新开始就好了。
m = n+1;
}
return false;
}
}