描述 :
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.
n
will be less than 20,000
.
样例:
Given nums = [1, 2, 3, 4]
return False
// There is no 132 pattern in the sequence.
Given nums = [3, 1, 4, 2]
return True
// There is a 132 pattern in the sequence: [1, 4, 2].
思路:
132可以看作是以第三个数为基准,一个数大于他一个数小于他,而且对两个数的位置有要求,更小的在前。从数组末尾开始遍历。
public class Solution {
/**
* @param nums a list of n integers
* @return true if there is a 132 pattern or false
*/
public boolean find132pattern(int[] nums) {
// Write your code here
if(nums == null || nums.length < 3){
return false;
}
for(int i = nums.length - 1;i>=2;i--){
int j = i - 1;
int k = 0;
while(j > k){
if(nums[i] > nums[k] && nums[i] < nums[j]) return true;
if(nums[i] <= nums[k]) k++;
if(nums[i] >= nums[j]) j--;
}
}
return false;
}
}