3637. 三段式數組 I

簡單 數組

思路

題目要求先嚴格遞增,再嚴格遞減,最後再嚴格遞增。
我們能用變數紀錄當前是遞增還是遞減,並在後續用xor判斷現在遞增遞減的狀態與之前是否相同,
假如不同,就代表狀態有所變化,原先的題目要求就轉化成「要求矩陣有兩次狀態變化」。

程式碼

class Solution {
public:
    bool isTrionic(vector<int>& nums) {
        if(nums.size() < 4) return false;
        int n = nums.size();
        int cnt = 0;
        bool dir = nums[1] > nums[0]; // 一開始是否遞增
        if(!dir) return false;
        for(int i = 1; i < n; i++) {
            if(nums[i] == nums[i - 1]) return false; // 數值相同,不嚴格
            if((nums[i] > nums[i - 1]) ^ dir) { // 方向是否變動
                dir = !dir;
                if(++cnt > 2) return false; // 變動次數增加,最大上限為 2
            }
        }
        return cnt == 2; // 恰好變動兩次
    }
};

複雜度分析

  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(1)O(1)

顯示設定

背景線條
顯示背景網格線條
懸停發光
滑鼠懸停時顯示霓虹效果
聚光燈
跟隨滑鼠的聚光燈效果
背景透明度
開啟透明玻璃效果
主題顏色
自訂主要顏色