Trionic Array Explanation
Trionic Array I
Easy
Topics
premium lock icon
Companies
Hint
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
explain it
Printed using ChatGPT to PDF, powered by PDFCrowd HTML to PDF API. 1/7
Alright, let’s slow this down and really understand what “trionic array” means, not just memorize the
rule.
What does trionic mean?
You’re given an array nums of length n.
The array is trionic if you can split it into three continuous parts using two indices p and q such that:
0 < p < q < n-1
And the parts follow this shape:
↑ ↓ ↑
That means:
1. First part (0 → p)
Strictly increasing
2. Second part (p → q)
Strictly decreasing
3. Third part (q → n-1)
Strictly increasing again
⚠️ Strictly means:
Increasing → every next element is greater
Decreasing → every next element is smaller
No equal values allowed
Visual intuition
Think of the graph of values:
start → peak → valley → end
So the array must:
go up
then go down
then go up again
That’s why it’s called tri-onic (three monotonic segments).
Example 1
Input
Printed using ChatGPT to PDF, powered by PDFCrowd HTML to PDF API. 2/7
nums = [1, 3, 5, 4, 2, 6]
Let’s try:
p = 2, q = 4
Break the array
1️⃣ nums[0…2] → [1, 3, 5]
1<3<5✅
Strictly increasing
2️⃣ nums[2…4] → [5, 4, 2]
5>4>2✅
Strictly decreasing
3️⃣ nums[4…5] → [2, 6]
2<6✅
Strictly increasing
✔ All conditions satisfied → true
Example 2
Input
nums = [2, 1, 3]
Possible splits?
First part must increase → 2 → 1 ❌ (decreasing)
If we shift indices, one of the three parts will be too short or violate strictness
🚫 No valid p and q
Answer: false
Key rules to remember
1️⃣ Minimum size
You need at least 3 elements, but realistically:
First ↑ needs ≥ 2 elements
Middle ↓ needs ≥ 2 elements
Last ↑ needs ≥ 2 elements
Printed using ChatGPT to PDF, powered by PDFCrowd HTML to PDF API. 3/7
So the pattern must actually exist, not just touch.
2️⃣ Strict comparison
These are ❌ invalid:
1, 2, 2 (not strictly increasing)
5, 5, 3 (not strictly decreasing)
Simple way to think about solving it
Instead of brute-forcing p and q, think like this:
1. Walk forward while numbers are increasing
2. Then walk while numbers are decreasing
3. Then walk while numbers are increasing again
4. If you finish exactly at the end → trionic
If at any step the pattern breaks → false
One-pass intuition (no code)
For [1, 3, 5, 4, 2, 6]:
1 → 3 → 5 ↑
5 → 4 → 2 ↓
2 → 6 ↑
Pattern complete ✔
Why interviewers like this problem
It tests:
Array traversal logic
Understanding of strict monotonicity
Edge-case thinking (equal values, short segments)
If you want, I can:
Show C code
Show Python
Show a dry run table
Or compare this with mountain array problems
Just tell me.
Printed using ChatGPT to PDF, powered by PDFCrowd HTML to PDF API. 4/7
how to solve it
Good question. I’ll show you how to solve it step-by-step, logically, and then give you clean C code
(since you often ask in C).
Core idea (no tricks)
A trionic array must follow exactly this order:
increasing → decreasing → increasing
So we solve it by one forward scan using an index.
Step-by-step algorithm
Let i = 0.
1️⃣ First increasing part
Move forward while the array is strictly increasing.
nums[i] < nums[i+1]
Stop when this condition breaks.
⚠️ If this part has length < 2 → ❌ return false
2️⃣ Middle decreasing part
Now move forward while strictly decreasing.
nums[i] > nums[i+1]
Stop when this breaks.
⚠️ If this part has length < 2 → ❌ return false
3️⃣ Last increasing part
Now move forward while strictly increasing again.
nums[i] < nums[i+1]
4️⃣ Final check
If you reached exactly the last index, then:
Printed using ChatGPT to PDF, powered by PDFCrowd HTML to PDF API. 5/7
✔ valid trionic array
Else:
❌ not trionic
Why this works
Order is enforced (↑ ↓ ↑)
Strict comparisons avoid equal values
One pass → O(n) time
No extra space → O(1)
Dry run (important)
For:
nums = [1,3,5,4,2,6]
Step i Comparison Action
↑ 0 1<3 move
↑ 1 3<5 move
↓ 2 5>4 move
↓ 3 4>2 move
↑ 4 2<6 move
End 5 — success
C implementation (clean & interview-ready)
Printed using ChatGPT to PDF, powered by PDFCrowd HTML to PDF API. 6/7
#include <stdbool.h>
bool isTrionic(int* nums, int n) {
if (n < 3) return false;
int i = 0;
// 1. strictly increasing
while (i + 1 < n && nums[i] < nums[i + 1]) {
i++;
}
if (i == 0) return false; // no increase
// 2. strictly decreasing
while (i + 1 < n && nums[i] > nums[i + 1]) {
i++;
}
if (i == n - 1) return false; // no last increase
// 3. strictly increasing again
while (i + 1 < n && nums[i] < nums[i + 1]) {
i++;
}
return i == n - 1;
}
Common mistakes ❌
1. Using <= or >=
→ breaks “strict” rule
2. Forgetting to check all 3 parts exist
3. Allowing pattern like:
↑ ↑ ↑ ↓ ↑ ↓ ↑ ❌ (multiple switches)
Only one decrease section is allowed.
Final takeaway
If you remember only one thing, remember this:
Scan once and enforce the pattern ↑ ↓ ↑ — no backtracking, no equality.
If you want, next I can:
Convert this to Python
Show edge test cases
Compare with Mountain Array
Explain how this appears in LeetCode interviews
Just say it.
Printed using ChatGPT to PDF, powered by PDFCrowd HTML to PDF API. 7/7