开始想用三个循环暴力求解,这样一下就超时了。改进方法,这题不是让你求出所有满足条件的三个数,因此只需要找出最有可能符合的三个点就可以了
class Solution {
public:
bool find132pattern(vector<int>& nums)
{
int n=nums.size();
if(n<3)
return false;
int i,j,k;
i=0;
while(i<n)
{
while(i+1<n&&nums[i]>=nums[i+1])i++;
// i is lowest now
j=i+1;
while(j+1<n&&nums[j]<=nums[j+1])j++;
// j is highest now
k=j+1;
while(k<n)
{
if(nums[k]>nums[i]&&nums[k]<nums[j])
return true;
k++;
}
i=j+1;
}
return false;
}
};