## 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:trueExplanation:There is 1 global inversion, and 1 local inversion.

**Example 2:**

Input:A = [1,2,0]Output:falseExplanation: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.

## Rust Solution

```
struct Solution;
impl Solution {
fn is_ideal_permutation(a: Vec<i32>) -> bool {
let n = a.len();
for i in 0..n {
if (a[i] - i as i32).abs() > 1 {
return false;
}
}
true
}
}
#[test]
fn test() {
let a = vec![1, 0, 2];
let res = true;
assert_eq!(Solution::is_ideal_permutation(a), res);
let a = vec![1, 2, 0];
let res = false;
assert_eq!(Solution::is_ideal_permutation(a), res);
}
```

Having problems with this solution? Click here to submit an issue on github.