LeetCode 775. 全局倒置与局部倒置

news/2024/11/24 3:30:38/

775. 全局倒置与局部倒置

 

【归并排序】显然全局倒置就是求整体的逆序对,用归并排序的思想可以在O(nlogn)的复杂度下求出逆序对的个数。

class Solution {// 9:56 15int[] nums, tmp;int n;int global(int l, int r) {if (l == r) return 0;int m = (l + r) >> 1;int ret = 0;ret += global(l, m); ret += global(m + 1, r);int i = l, j = m + 1, k = 0;while (i <= m && j <= r) {if (nums[i] > nums[j]) {tmp[k++] = nums[i++];ret += r - j + 1;} else {tmp[k++] = nums[j++];}}while (i <= m) tmp[k++] = nums[i++];while (j <= r) tmp[k++] = nums[j++];for (i = l, k = 0; i <= r;) nums[i++] = tmp[k++];return ret;}int local() {int ret = 0;for (int i = 0; i < n - 1; i++) {if (nums[i] > nums[i + 1]) ret++;}return ret;}public boolean isIdealPermutation(int[] nums) {this.nums = nums;n = nums.length;tmp = new int[n];if (local() == global(0, n - 1)) return true;return false;}
}

【数学】我们发现局部倒置一定是全局倒置,如果数量相同就是所有的全局倒置都是局部的,也就是都是相邻的,那么只需要检查一下有没有不相邻的倒置即可。

 

class Solution {// 维护后缀最小值// 10:56 3public boolean isIdealPermutation(int[] nums) {int n = nums.length, min = nums[n - 1];for (int i = n - 3; i >= 0; i--) {if (nums[i] > min) return false;min = Math.min(nums[i + 1], min);}return true;}
}

 

 


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

相关文章

Codeforces Round #775 (Div. 2) ABCDE题解

A-Game 题目大意&#xff1a; 一条直线上有若干个点&#xff0c;每个点有两种情况&#xff1a; land 可以经过water 不能经过 每次只能移动一个距离&#xff0c;如果下一个是land&#xff0c;就可以到下一个land上&#xff0c;花费为0。 最多可以使用一次跳跃&#xff0c;从…

Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad in Informatics) B. Integral Array

Problem - B - Codeforces 翻译&#xff1a; 给定一个由&#x1d45b;个正整数组成的数组&#x1d44e;&#xff0c;这些正整数从1到&#x1d45b;编号。我们称数组为整数&#xff0c;如果这个数组中的任意两个不一定不同的数字&#x1d465;和&#x1d466;&#xff0c;&…

linux命令chmod命令设置权限的777,775,774

chmod是Linux下设置文件权限的命令&#xff0c;后面的数字表示不同用户或用户组的权限。 一般是三个数字&#xff1a; 第一个数字表示文件所有者的zhidao权限 第二个数字表示与文件所有者同属一个用户组的其他用户的权限 第三个版数字表示其它用户组的权限。 权限分为三种&…

Linux权限字符串755,775,777,ugoa 等分别代表什么含义?这些数字是如何得到的?

1.常用的linux文件权限&#xff1a; 444 -r--r--r-- 600 -rw------- 644 -rw-r--r-- 666 -rw-rw-rw- 700 -rwx------ 744 -rwxr--r-- 755 -rwxr-xr-x 777 -rwxrwxrwx注:使用ll命令查看文件/文件夹属性时候,一共有10列,第一个小格表示是文件夹或者连接等等 d表示文件夹,l表示连…

ansible的部署和命令模块

一、 ansible 的概述 1、ansible简介 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成&#xff0c;类似于saltstack和Puppet&#xff0c;但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 …

Maven创建Web项目

创建 Web 应用 通过使用 Maven 的 maven-archetype-webapp 模板可以创建一个简单的 Web 应用。 例如&#xff0c;在命令行窗口执行以下命令&#xff0c;Maven 会为我们创建一个 JavaWeb 应用。 mvn archetype:generate -DgroupIdnet.biancheng.www -DartifactIdmavenWeb -Darc…

第七十二天学习记录:初读《C陷阱与缺陷》

首次快速阅读完《C陷阱与缺陷》&#xff0c;感觉还是读得有些稀里糊涂的。 首先给人的感觉就是大部分人可以感受到的&#xff0c;作者对于较为初代C语言的研究已经达到了可以说是“炉火纯青”的程度。 尽管作者写这本书的时候距离至今已经过去了二十几年&#xff0c;但很多C语言…

可能是知乎里最浅显易懂的激光测距技术讲解:什么是点激光,线激光,面激光。它们在扫地机器人上是如何应用的。

几年前的行业内人士肯定很难想到,在不久后的今天激光测距这项技术会距离生活这么近,甚至直接深入到我们家里天天使用。 激光测距行业努力了这么多年发展的技术几乎全都用上了,就为了给扫地机器人检测它前面有没有狗屎。。。 虽然扫地机器人上用上这些技术有一两年了,但是…