递增的三元子序列

318 阅读1分钟

题目描述

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。

题解

定义两个变量smallmid,分别记录发现的最小值和中间值,如果有比small小的,更新small,如果有比mid大的,则可以返回``true`

const increasingTriplet = function (nums) {
  const len = nums.length;
  if (len < 3) return false;
  let small = Infinity; let mid = Infinity;
  for (const num of nums) {
      if (num <= small) {
        small = num;
      } else if (num <= mid) {
        mid = num;
      } else if (num > mid) {
        return true;
      }
  }
  return false;
};

时间复杂度:O(n)
空间复杂度:O(1)