题目
给你一个长度为 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 个局部倒置。
解题
方法一:
局部倒置一定是全局倒置。
因此只要出现非局部倒置的全局倒置,直接返回false即可。
class Solution { public: bool isIdealPermutation(vector<int>& nums) { int localCount=0; int n=nums.size(); vector<int> maxNums(n);//记录到目前为止最大的数 int maxNum=0; for(int i=0;i<n;i++){ maxNum=max(maxNum,nums[i]); maxNums[i]=maxNum; if(i>=2&&nums[i]<maxNums[i-2]) return false;//存在非局部倒置的全局倒置,就直接返回false } return true; } };