Leetcode 456. 132模式
题目链接
https://leetcode-cn.com/problems/132-pattern/
给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。
注意:n 的值小于15000。
示例1:
输入: [1, 2, 3, 4]
输出: False
解释: 序列中不存在132模式的子序列。
示例 2:
输入: [3, 1, 4, 2]
输出: True
解释: 序列中有 1 个132模式的子序列: [1, 4, 2].
示例 3:
输入: [-1, 3, 2, 0]
输出: True
解释: 序列中有 3 个132模式的的子序列: [-1, 3, 2], [-1, 3, 0] 和 [-1, 2, 0].
思路:通过打擂台的方式
第一个循环跑最小值,如果当前值最小,就进入第二层循环,第二层循环要找到32,也就是比nums[j]>min,且nums[j]<nums[i],这样子就确认了最大值和次小值
1 int min(int a,int b) 2 { 3 return a>b?b:a; 4 } 5 bool find132pattern(int* nums, int numsSize) 6 { 7 int i,j,min1=9999999999; 8 for(i = 0; i<numsSize; i ++) 9 { 10 min1 = min(min1,nums[i]); 11 if(min1 != nums[i]) 12 { 13 for(int j=numsSize-1;j>i;j--) 14 { 15 if(min1<nums[j]&&nums[j]<nums[i]) 16 return true; 17 } 18 } 19 } 20 return false; 21 }