力扣(LeetCode)775. 全局倒置与局部倒置(C++)

news/2024/11/24 2:02:00/

模拟

理解题,全局倒置就是不相邻的逆序对,局部倒置就是相邻的逆序对。提示中给出, 0 < = n u m s [ i ] < n 0 <= nums[i] < n 0<=nums[i]<n ,其中 n = = n u m s . l e n g t h n == nums.length n==nums.length , n u m s nums nums 中的所有整数 互不相同,可知 n u m s nums nums 中包含 0 0 0 n − 1 n-1 n1 所有数。
分情况理解:

  1. 所有数按顺序 从 0 0 0 n − 1 n-1 n1 排列,顺序数组,符合条件, r e t u r n t r u e return~true return true
  2. 相邻的数颠倒顺序,如 0 1 2 0~1~2 0 1 2 变成 1 0 2 1~0~2 1 0 2 ,发现逆序对 < 1 , 0 > <1,0> <1,0>前一个数 1 1 1 减下标相差 1 1 1 , 后一个数 0 0 0 减下标相差 − 1 -1 1 。数和下标相差 1 1 1 − 1 -1 1 ,是局部倒置的条件,符合 t r u e true true 的要求。
  3. 同理,一个数和自己下标相差大于 1 1 1 ,这就是不相邻的逆序对(全局倒置), r e t u r n f a l s e return~false return false

本题之所以这么简单,是因为题目限制诸多。如果没有 n u m s nums nums 是范围 [ 0 , n − 1 ] [0, n - 1] [0,n1] 内所有数字组成的一个排列,这个限制,那么博主一时之间只能想到暴力循环了~

代码展示

class Solution {
public:bool isIdealPermutation(vector<int>& nums) {for(int i = 0;i<nums.size();i++)if(nums[i]!= i &&i-1!=nums[i]&&i+1!=nums[i]) return false;return true;}
};
合并同类项
class Solution {
public:bool isIdealPermutation(vector<int>& nums) {for(int i = 0;i<nums.size();i++)if(abs(nums[i]-i)>1) return false;return true;}
};

博主致语

理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。

AC

AC

复杂度分析

  1. 时间复杂度: O ( n ) O(n) O(n) n n n n u m s nums nums 的长度。 ,一次遍历 n u m s nums nums 的时间复杂度是 O ( n ) O(n) O(n)
  2. 空间复杂度: O ( 1 ) O(1) O(1),除若干变量使用的常量级空间,没有使用额外线性空间。

http://www.ppmy.cn/news/361604.html

相关文章

每日一题 —— LC. 775 全局倒置与局部倒置

775. 全局倒置与局部倒置 给你一个长度为 n 的整数数组 nums &#xff0c;表示由范围 [0, n - 1] 内所有整数组成的一个排列。 全局倒置 的数目等于满足下述条件不同下标对 (i, j) 的数目&#xff1a; 0 < i < j < nnums[i] > nums[j] 局部倒置 的数目等于满足…

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics(补)

A .因为只能跳一次 如果没有0 就输出0 否则就输出第一个0到最后一个0 的l-r2 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back const int INF0x3f3f3f3f; const int N2e510,M1e610; int a[N],mp[M]{0}; void solve(){int n;ci…

Codeforces Round #775 - F. Serious Business

F. Serious Business prob. &#xff1a;有 3 n 3\times n 3n个格子&#xff0c;每个格子有一个权值&#xff0c;你要从左上走到右下&#xff0c;每一步只能往右或往下走&#xff0c;刚开始的时候第二行是封锁的状态&#xff0c;你有一些可选的操作去解锁第二行从 [ L i , R …

Codeforces Round #775 CF1649 ABCD

1649A - Game(英语题) 不能走0&#xff0c;最小跳跃长度 题目描述很微妙&#xff0c;注意只能跳一次&#xff01;我开始以为是遇到连续 0 0 0才跳&#xff0c;后来感谢EM-LGH大神&#xff0c;才让我悟到了正确题意。 1649B - Game of Ball Passing(贪心) 传球游戏&#xff0c;…

Codeforces Round #775 (Div. 2) E.Tyler and Strings

Problem - E - Codeforces 题意&#xff1a;给你两个数组s、t&#xff0c;让你重新排列s的数&#xff0c;问有多少种排列使得s的字典序严格小于t。s&#xff0c;t的长度和数组内的数开到2e5。 首先先得知道多重集的排列数&#xff1a; 一个由c1个a1&#xff0c;c2个a2……ck…

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics) 题解

A. Game 思路 只能跳一次&#xff01;&#xff01;&#xff01;&#xff01;从左和从右开始找到第一个0&#xff0c;然后相减2&#xff08;从0回到上一格的1陆地&#xff09;即可 经验教训 无 AC代码 #define int long long const int maxn 2e5 10; int a[maxn];void solve(…

LeetCode-775. 全局倒置与局部倒置【最小后缀,归纳】

LeetCode-775. 全局倒置与局部倒置【最小后缀&#xff0c;归纳】 题目描述&#xff1a;解题思路一&#xff1a;常规暴力方法剪枝。解题思路二&#xff1a;维护后缀最小值.解题思路三&#xff1a;三行代码&#xff01;&#xff01;&#xff01;进一步&#xff0c;我们可以发现对…

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)A~C 题解(原来如此简单,超级详细入门必备)

A. Game 题目传送门 题目理解&#xff1a;一个人要过河&#xff0c;这个人不会游泳&#xff0c;只能走陆地&#xff0c;一旦碰水就死翘翘&#xff0c;但是现在给你一个bug&#xff0c;只要你给x个硬币&#xff0c;你就可以传送到ix块陆地上面&#xff0c;比如你在第5块土地上…