C++ 中的全域性逆序和區域性逆序
假設我們有一些 [0, 1, ..., N - 1] 的排列 A,其中 N 為 A 的長度。現在,(全域性)逆序數就是 i < j 且 0 <= i < j < N 還有 A[i] > A[j] 的數量。並且區域性逆序數就是 i 且 0 <= i < N 還有 A[i] > A[i+1] 的數量。僅當全域性逆序數與區域性逆序數相等時,我們才將 true 返回。因此,如果輸入類似於 [1,0,2],則返回 true,因為僅有一個區域性逆序和一個全域性逆序。
為了解決這個問題,我們將按照以下步驟進行操作
- maxVal := -1, n := A 的大小
- i 的範圍是 0 到 n – 3
- maxVal := A[i] 與 maxVal 中較大的那個
- 如果 maxVal > A[i + 2];那麼返回 false
- 返回 true
讓我們看看以下實現來獲得更好的理解
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: bool isIdealPermutation(vector<int>& A) { int maxVal = -1; int n = A.size(); for(int i = 0; i < n - 2; i++){ maxVal = max(A[i], maxVal); if(maxVal > A[i + 2]) return false; } return true; } }; main(){ vector<int> v = {1,0,2}; Solution ob; cout << (ob.isIdealPermutation(v)); }
輸入
[1,0,2]
輸出
1
廣告