Skip to content

3637. Trionic Array I

Description

You are given an integer array nums of length n.

An array is trionic if there exist indices 0 < p < q < n − 1 such that:

  • nums[0...p] is strictly increasing,
  • nums[p...q] is strictly decreasing,
  • nums[q...n − 1] is strictly increasing.

Return true if nums is trionic, otherwise return false.

 

Example 1:

Input: nums = [1,3,5,4,2,6]

Output: true

Explanation:

Pick p = 2, q = 4:

  • nums[0...2] = [1, 3, 5] is strictly increasing (1 < 3 < 5).
  • nums[2...4] = [5, 4, 2] is strictly decreasing (5 > 4 > 2).
  • nums[4...5] = [2, 6] is strictly increasing (2 < 6).

Example 2:

Input: nums = [2,1,3]

Output: false

Explanation:

There is no way to pick p and q to form the required three segments.

 

Constraints:

  • 3 <= n <= 100
  • -1000 <= nums[i] <= 1000

 

Solutions

Solution: Simulation

  • Time complexity: O(n)
  • Space complexity: O(1)

 

JavaScript

js
/**
 * @param {number[]} nums
 * @return {boolean}
 */
const isTrionic = function (nums) {
  const n = nums.length;

  const trionic = (start, compare) => {
    for (let index = start; index < n; index++) {
      const prev = nums[index - 1];
      const num = nums[index];

      if (!compare(prev, num)) return index;
    }

    return n;
  };

  const p = trionic(1, (a, b) => a < b);

  if (p === 1) return false;

  const q = trionic(p, (a, b) => a > b);

  if (q === p) return false;

  const end = trionic(q, (a, b) => a < b);

  return end === n && end !== q;
};

Released under the MIT license