X

Increasing Triplet Subsequence

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 exist, return false.

The problem described is commonly known as the "Increasing Triplet Subsequence" problem. Here's a Ruby solution: 

def increasing_triplet(nums)
  # Check if there are at least three elements in the array
  return false if nums.length < 3

  # Initialize two variables to track the smallest and second smallest elements
  first = Float::INFINITY
  second = Float::INFINITY

  # Iterate through the array
  nums.each do |num|
    # Update the smallest element if the current element is smaller
    if num <= first
      first = num
    # Update the second smallest element if the current element is greater than the smallest
    elsif num <= second
      second = num
    # If we find an element greater than both first and second, we have an increasing triplet
    else
      return true
    end
  end

  # If we finish iterating without finding a triplet, return false
  false
end

 Let's walk through the Ruby Solution step by step:

The function is named increasing_triplet, and it takes an array of integers nums as its parameter.

return false if nums.length < 3
If the length of the array nums is less than 3, it means there are not enough elements to form a triplet, so the function returns false immediately.
first = Float::INFINITY   # Smallest element
second = Float::INFINITY  # Second smallest element

Two variables, first and second, are initialized with positive infinity. These variables will be used to keep track of the smallest and second smallest elements encountered so far.

Iteration through Array:
nums.each do |num|
The function iterates through each element num in the input array nums.

if num <= first
  first = num
elsif num <= second
  second = num

If the current element num is less than or equal to the current value of first, update first. If it is greater than first but less than or equal to second, update second.

else
  return true

If the current element is greater than both first and second, it means we have found a triplet, and the function returns true.

false

If the function completes the iteration without finding a triplet, it returns false.

Example Usage:
arr1 = [1, 2, 3, 4, 5]
arr2 = [5, 4, 3, 2, 1]

puts increasing_triplet(arr1)  # Output: true
puts increasing_triplet(arr2)  # Output: false

The function is called with two example arrays, and the results are printed. In the first case, there is an increasing triplet, so it returns true. In the second case, there is no such triplet, so it returns false.

This solution effectively uses two variables to keep track of the smallest and second smallest elements, updating them as the array is traversed. If, at any point, a third element is found that is greater than both first and second, it indicates the presence of an increasing triplet subsequence.