题目如下:
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.
我写的这个方法击败了百分之99.5的人,代码如下:
class Solution {
public boolean find132pattern(int[] nums) {
if(nums==null||nums.length<3) return false;
//min[I]表示minimum between nums[0] and nums[i]
//max[I]表示maximun between nums[0] and nums[i]
int[] min=new int[nums.length];
int[] max=new int[nums.length];
min[0]=nums[0];
max[0]=nums[0];
for(int i=1;i<nums.length;i++){
if(nums[i]>=max[i-1]){
max[i]=nums[i];
min[i]=min[i-1];
}
else if(nums[i]<=min[i-1]){
min[i]=nums[i];
max[i]=max[i-1];
}
else{
int j=0;
for( j=i-1;j>=1;j--){
if(nums[j]>nums[i])
break;
}
if(j>=1&&min[j-1]<nums[i])
return true;
max[i]=max[i-1];
min[i]=min[i-1];
}
}
return false;
}
}
大家如果有更好的方法,欢迎分享。谢谢啦~~