【LeetCode 75】 第八题(334)递增的三元子序列

目录

题目:

示例:

分析:


题目:

【LeetCode 75】 第八题(334)递增的三元子序列_第1张图片

示例:

【LeetCode 75】 第八题(334)递增的三元子序列_第2张图片

分析:

题目很简单,就是找出一个数组中递增的长度为3的子序列(不用连续).

我们很容易就能想到的解法是套三层for循环,找出符合要求子序列,然后这么做的话大概率是会超时.

我们可以用一点贪心的思想,只需要一次遍历就可以判断是否有符合要求的子序列.

既然我们是需要找出三个数,让他们递增就可以,那么我们可以只缓存两个数,即子序列的第一个数和第二个数,并且第二个数要大于第一个数,然后当我们遇到一个比第二个数更大的数时,也就是找到了比两个数都大的数,这样就找到了长度为3的递增子序列.

我们需要初始化子序列第一个数为整个数组的第一个数,然后在遍历的过程中不断更新第一个数和第二个数:

碰到比第二个数大的数则直接返回true.

碰到比第一个数大的数则更新第二个数为碰到的数由于比第二个数大的话会直接返回true,所以这里会使的第二个数更新成更小的数,也就更容易遇到比第二个数更大的数

同理,碰到比第一个数更小的数则更新第一个数为碰到的数,把第一个数变得更小就更容易碰到比自己大的数.

完整代码+结果如下: 

class Solution {
public:
    bool increasingTriplet(vector& nums) {
        int first = nums[0];
        int second = INT_MAX;
        for (const int &num:nums) {
            if (num > second) { //找到三元组
                return true;
            } else if (num > first) {   //更新第二个数
                second = num;
            } else {    //更新第一个数
                first = num;
            }
        }
        return false;
    }
};

【LeetCode 75】 第八题(334)递增的三元子序列_第3张图片

你可能感兴趣的:(LeetCode75题解,leetcode,算法,c++,数据结构)