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;
};