读题的重要性。
提示中说明
nums 中的所有整数 互不相同
nums 是范围 [0, n - 1] 内所有数字组成的一个排列
那也就是说明,如果对nums排序的话,排完为一个0到n - 1的递增数组。
局部倒置,一定是全局倒置。也就是说只要找到在某一点的全局倒置多余局部(1),就可以返回false了。
可以这样想,如果局部倒置和全局倒置相等的话,只能相邻两个数交换,这样才能保证局部倒置为1,全局倒置也为一。
因此如果一个数偏离他的位置超过1,证明不是两个相邻的数交换,全局倒置一定多余局部倒置。返回false
class Solution {
public:
bool isIdealPermutation(vector<int>& nums) {
int n = nums.size();
for(int i = 0; i < n; i++)
{
if(nums[i] != i)
{
if(nums[i + 1] != i || nums[i] != i + 1)
return false;
i++;
}
}
return true;
}
};