这里考虑从后面往前面走,这样的话就不是计算中间值,而是计算最小值。时间就是O(n)了。
class Solution {
public:
bool find132pattern(vector<int>& nums) {
vector<int> range_value;
int tmp_left;
int tmp_val = 0;
int nums_len = nums.size();
for(int i = 0; i < nums_len; i++)
{
if(i == 0)
{
tmp_left = nums[i];
tmp_val = 1;
}
int range_lens = range_value.size();
for(int j = 0; j < range_lens; j+=2)
{
if(range_value[j] < nums[i] && range_value[j+1] > nums[i])
return true;
}
if(!tmp_val)
{
if(range_lens < 2)
{
tmp_left = nums[i];
tmp_val = 1;
}
else
{
if(range_value[range_lens-1] < nums[i])
{
range_value[range_lens - 1] = nums[i];
}
else
{
tmp_left = nums[i];
tmp_val = 1;
}
}
}
else
{
if(tmp_left > nums[i])
{
tmp_left = nums[i];
}
else if(tmp_left < nums[i])
{
range_value.push_back(tmp_left);
range_value.push_back(nums[i]);
tmp_val = 0;
}
}
}
return false;
}
};