Leetcode
334. Increasing Triplet Subsequence

334. Increasing Triplet Subsequence

Description

Given an integer array nums, return true if there exists a triple of indices (i, j, k) such that i < j < k and nums[i] < nums[j] < nums[k]. If no such indices exists, return false.

Example 1:

  Input: nums = [1,2,3,4,5]
  Output: true
  Explanation: Any triplet where i < j < k is valid.

Example 2:

  Input: nums = [5,4,3,2,1]
  Output: false
  Explanation: No triplet exists.

Example 3:

  Input: nums = [2,1,5,0,4,6]
  Output: true
  Explanation: The triplet (3, 4, 5) is valid because nums[3] == 0 < nums[4] == 4 < nums[5] == 6.

Constraints:

  • 1 <= nums.length <= 5 * 10^5
  • 2^31 <= nums[i] <= 2^31 - 1

My Solution

 
// Failed: Time Limit Exceeded
/**
 * @param {number[]} nums
 * @return {boolean}
 */
var increasingTriplet = function (nums) {
  for (let i = 0; i < nums.length - 2; i++) {
    let first = nums[i]
    for (let j = i + 1; j < nums.length - 1; j++) {
      let second
      if (first < nums[j]) {
        second = nums[j]
      } else {
        continue
      }
      for (let k = j + 1; k < nums.length; k++) {
        if (second < nums[k]) {
          return true
        } else {
          continue
        }
      }
    }
  }
  return false
}
 

Solution from others

 
var increasingTriplet = function (nums) {
  let first = Infinity
  let second = Infinity
 
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] <= first) {
      first = nums[i]
    } else if (nums[i] <= second) {
      second = nums[i]
    } else {
      return true
    }
  }
  return false
}