# 775. Global and Local Inversions

We have some permutation `A` of `[0, 1, ..., N - 1]`, where `N` is the length of `A`.

The number of (global) inversions is the number of `i < j` with `0 <= i < j < N` and `A[i] > A[j]`.

The number of local inversions is the number of `i` with `0 <= i < N` and `A[i] > A[i+1]`.

Return `true` if and only if the number of global inversions is equal to the number of local inversions.

Example 1:

``````Input: A = [1,0,2]
Output: true
Explanation: There is 1 global inversion, and 1 local inversion.
``````

Example 2:

``````Input: A = [1,2,0]
Output: false
Explanation: There are 2 global inversions, and 1 local inversion.
``````

Note:

• `A` will be a permutation of `[0, 1, ..., A.length - 1]`.
• `A` will have length in range `[1, 5000]`.
• The time limit for this problem has been reduced.

``````class Solution {
public:
bool isIdealPermutation(vector<int>& A) {
int n = A.size(), mn = INT_MAX;
for (int i = n - 1; i >= 2; --i) {
mn = min(mn, A[i]);
if (A[i - 2] > mn) return false;
}
return true;
}
};
``````

``````class Solution {
public:
bool isIdealPermutation(vector<int>& A) {
int n = A.size(), mx = INT_MIN;
for (int i = 0; i < n - 2; ++i) {
mx = max(mx, A[i]);
if (A[i + 2] < mx) return false;
}
return true;
}
};
``````

``````class Solution {
public:
bool isIdealPermutation(vector<int>& A) {
for (int i = 0; i < A.size(); ++i) {
if (abs(A[i] - i) > 1) return false;
}
return true;
}
};
``````

https://leetcode.com/problems/global-and-local-inversions/solution/

https://leetcode.com/problems/global-and-local-inversions/discuss/113656/My-3-lines-C++-Solution

LeetCode All in One 题目讲解汇总(持续更新中…)

 微信打赏 Venmo 打赏
（欢迎加入博主的知识星球，博主将及时答疑解惑，并分享刷题经验与总结，试运营期间前五十位可享受半价优惠～）

×

Help us with donation