# 334. Increasing Triplet Subsequence

**<font color=red>难度: Medium</font>**

## 刷题内容

> 原题连接

* https://leetcode.com/problems/increasing-triplet-subsequence/

> 内容描述

```
Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the array.

Formally the function should:

Return true if there exists i, j, k 
such that arr[i] < arr[j] < arr[k] given 0 ≤ i < j < k ≤ n-1 else return false.
Note: Your algorithm should run in O(n) time complexity and O(1) space complexity.

Example 1:

Input: [1,2,3,4,5]
Output: true
Example 2:

Input: [5,4,3,2,1]
Output: false
```

## 解题方案

> 思路 1
******- 时间复杂度: O(N)******- 空间复杂度: O(1)******

用第[414 题 Third Maximum Number](https://github.com/apachecn/awesome-algorithm/blob/master/docs/Leetcode_Solutions/Python/414._third_maximum_number.md)的思路二方法，维护一个当前最小和当前第二小，当碰到当前比较大，返回True，否则一圈走下来依旧不能满足，返回false.

想一下，如果不是求三个增长，如果是求两个的话，那么一定想到的是保存当前最小值，那么一旦后方遇到一个比较大的，就这样处理掉了。

所以对于任何一个num来说，有三种可能：

- 小于当前的最小值，那么更新当前最小值
- 小于当前第二小值，更新当前第二小值
- 如果以上两种都不是，那么是大于当前第二小值和最小值，于是这样就true

所以是求四个增长也是类似的么

AC代码, beats 22.01%

```python
class Solution:
    def increasingTriplet(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        first = second = sys.maxsize
        for num in nums:
            if num <= first:
                first = num
            elif num <= second:
                second = num
            else:
                return True
        return False
```



