Java实现 LeetCode 775 全局倒置与局部倒置(分析题)

775. 全局倒置与局部倒置

数组 A 是 [0, 1, …, N - 1] 的一种排列,N 是数组 A 的长度。全局倒置指的是 i,j 满足 0 <= i < j < N 并且 A[i] > A[j] ,局部倒置指的是 i 满足 0 <= i < N 并且 A[i] > A[i+1] 。

当数组 A 中全局倒置的数量等于局部倒置的数量时,返回 true 。

示例 1:

输入: A = [1,0,2]
输出: true
解释: 有 1 个全局倒置,和 1 个局部倒置。
示例 2:

输入: A = [1,2,0]
输出: false
解释: 有 2 个全局倒置,和 1 个局部倒置。
注意:

A 是 [0, 1, …, A.length - 1] 的一种排列
A 的长度在 [1, 5000]之间
这个问题的时间限制已经减少了。

PS:
分析题
数组A中的元素是0到n-1
这个题的两种倒置,一种是差1的倒置,一种是差好几位的倒置
我们可以这么看,差1的倒置,只能一个,差好几位的倒置如果差的位置大于1
那么差好几位的倒置一定会比差1的倒置多的
所以这个题,就变成了,当前的位置如果比他的值差了2,那么就不相等了

class Solution {
      public boolean isIdealPermutation(int[] A) {
        int N = A.length;
        int floor = N;
        for (int i=N-1; i>=2; --i) {
            floor = Math.min(floor, A[i]);
            if (A[i-2] > floor) return false;
        }
        return true;
    }
}
原文地址:https://www.cnblogs.com/a1439775520/p/13074611.html