zl程序教程

您现在的位置是:首页 >  其它

当前栏目

775. 全局倒置与局部倒置-记忆最小值法

全局 局部 记忆 最小值 倒置
2023-09-14 09:06:52 时间

775. 全局倒置与局部倒置

给你一个长度为 n 的整数数组 nums ,表示由范围 [0, n - 1] 内所有整数组成的一个排列。

全局倒置 的数目等于满足下述条件不同下标对 (i, j) 的数目:

0 <= i < j < n
nums[i] > nums[j]

局部倒置 的数目等于满足下述条件的下标 i 的数目:

0 <= i < n - 1
nums[i] > nums[i + 1]

当数组 nums 中 全局倒置 的数量等于 局部倒置 的数量时,返回 true ;否则,返回 false 。

示例 1:

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

示例 2:

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

这题因为只需要我们去判断全局倒置和局部倒置数是否相等,所以并不需要求解出这两个变量,如果尝试去求解,就会麻烦多了,解题代码如下:

bool isIdealPermutation(int* nums, int numsSize){

    int  minarr[numsSize];
    int min=100000;
    for(int i=numsSize-1;i>=0;i--){
        min=fmin(nums[i],min);
          minarr[i]=min;
         if(i<numsSize-2){
             if(nums[i]>minarr[i+2]){
                 return false;
             }

         }
    }

    return true;

}