3637. Trionic Array I

練習日期:2026-02-03

難度:Easy

類型:Array、Weekly Contest 461

📘 題目敘述

給你一個長度為 n 的整數陣列 nums

如果存在索引 0 < p < q < n - 1 使得:

  • nums[0...p] 嚴格遞增
  • nums[p...q] 嚴格遞減
  • nums[q...n-1] 嚴格遞增

則稱這個陣列是 trionic

請回傳 nums 是否為 trionic。

條件限制

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

🧠 解題思路

我用一次線性掃描去判斷整段是否符合「遞增 → 遞減 → 遞增」三段式,並且用三個布林值記錄目前走到哪一段。

掃描時每一步只看相鄰兩個數 nums[i-1]nums[i]

  • 第一段(嚴格遞增):
    • 只要目前還沒進入第二段,就允許一直 nums[i-1] < nums[i]
    • 有出現過遞增就把 check1 = true
  • 第二段(嚴格遞減):
    • 必須先有第一段(check1 == true)才允許進入
    • 只要第三段還沒開始,就允許一直 nums[i-1] > nums[i]
    • 有出現過遞減就把 check2 = true
  • 第三段(嚴格遞增):
    • 一旦開始(遇到 nums[i-1] < nums[i] 且已經不在第一段的規則內),就把 check3 = true
    • 第三段開始後如果又出現 <= 或需要回到遞減,直接判定失敗
  • 其他情況(包含相等、或不符合段落順序的變化)
    • 直接回傳 false

最後必須三段都真的出現過(check1 && check2 && check3)才回傳 true

所有變數

  • nums:輸入陣列
  • check1:是否已經出現過「第一段嚴格遞增」
  • check2:是否已經出現過「第二段嚴格遞減」
  • check3:是否已經出現過「第三段嚴格遞增」

🪜 主要流程步驟

1. 初始化三個段落的出現狀態

  • check1 = false
  • check2 = false
  • check3 = false

2. 從左到右掃描相鄰關係(一次走完)

對每個 i = 1 ... n-1

  • 情況 A:nums[i-1] < nums[i] 且還沒進入第二段(!check2
    • 代表還在第一段嚴格遞增
    • check1 = true
  • 情況 B:nums[i-1] > nums[i] 且已經有第一段(check1)且第三段還沒開始(!check3
    • 代表在第二段嚴格遞減
    • check2 = true
  • 情況 C:nums[i-1] < nums[i](不符合情況 A 時才會走到這裡)
    • 代表進入/維持第三段嚴格遞增
    • check3 = true
  • 其他情況(包含相等、或不符合段落順序的變化)
    • 直接回傳 false

3. 檢查三段是否都成立

  • 如果 check1 && check2 && check3 為真,回傳 true
  • 否則回傳 false

💻 程式碼實作

class Solution {
public:
    bool isTrionic(vector<int>& nums) {
        bool check1 = false;
        bool check2 = false;
        bool check3 = false;
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i - 1] < nums[i] && !check2) {
                check1 = true;
            } else if (nums[i - 1] > nums[i] && check1 && !check3) {
                check2 = true;
            } else if (nums[i - 1] < nums[i]) {
                check3 = true;
            } else {
                return false;
            }
        }
        if (check1 && check2 && check3) {
            return true;
        } else {
            return false;
        }
    }
};

https://leetcode.com/problems/trionic-array-i/

作者: scottnick
撰寫日期: 2026-02-03
類別:
原文連結: https://scottnick.github.io/cpp-notes/all%20problems/3637-trionic-array-i.html