---
# System prepended metadata

title: 334. Increasing Triplet Subsequence
tags: [LeetCode75, medium, Array/String]

---

在原始的陣列中如果 index的 i < j < k 其中的值 nums[i] < nums[j] < nums[k]
其中 i, j, k可以跳號，則存在遞增的子陣列

思考
1.成立的條件有三個值達成遞增
2.找到目前已掃過的陣列中最小值和第二最小值並且找到接下來的值大於這兩個值即成立
3.如何再一次掃描中找到最小和第二小的值並且更新

```c++=
class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        //找到這個array中 index之 (i < j < k) 且 value之 (i < j < k)
        //找到目前已掃過的array中的第一小和第二小值然後再找到一個值大於第一小第二小則成立
        int min1 = INT_MAX;
        int min2 = INT_MAX;
        for(int i = 0; i < nums.size(); i++){
            if(nums[i] <= min1){
                //找到目前的第一最小值
                min1 = min(nums[i], min1);
            }else if(nums[i] <= min2){
                //代表目前的值沒有比第一最小值小 但比第二最小值小
                min2 = min(nums[i], min2);
            }else{
                //代表目前的值沒有比第一最小值小 也沒有比第二最小值小 則 條件成立
                return true;
            }
        }
        return false;
    }
};
```

```c++=
class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        //回傳這個陣列有沒有 index (i < j < k) 的 i < j < k
        //掃一次陣列 找到當前的最小和第二小 再找到一個值大於這兩個就成立
        int min1 = INT_MAX;
        int min2 = INT_MAX;
        for(int i : nums){
            if(i <= min1){
                //如果找到比最小值小的更新
                min1 = min(i, min1);
            }else if(i <= min2){
                //如果目前的值比最小值大 判斷有沒有比第二最小值小
                min2 = min(i, min2);
            }else{
                //代表 目前的值比 最小和第二最小大 成立
                return true;
            }
        }
        return false;
    }
};

```