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.
Approach
- 这道题大意很明显,就不复述了,直接讲思路,数学类的题很需要观察力呀,多举例子仔细观察你会发现global inversions的数量一定大于或等于local inversion,什么情况下会大于呢,当
A[i-2] ~ A[0]
中MAX 大于A[i]时就一定大于local inversion了,自己可以尝试举举例子,很容易得出结论,那么这道题也就非常简单了。
Code
class Solution {
public:
bool isIdealPermutation(vector<int>& A) {
if (A.size() < 3)return true;
int maxn = A[0];
for (int i = 2; i < A.size(); i++) {
if (maxn > A[i])return false;
maxn = max(maxn, A[i - 1]);
}
return true;
}
};