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 }
View Code

 

posted @ 2019-12-30 15:38  阿十三  阅读(181)  评论(0编辑  收藏  举报