图解LeetCode——775. 全局倒置与局部倒置(难度:中等)

news2025/7/9 11:57:56

一、题目

给你一个长度为 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 。

二、示例

2.1> 示例 1:

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

2.2> 示例 2:

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

提示:

  • n == nums.length
  • 1 <= n <= 5000
  • 0 <= nums[i] < n
  • nums 中的所有整数 互不相同
  • nums 是范围 [0, n - 1] 内所有数字组成的一个排列

三、解题思路

3.1> 根据前缀的最大值来判断

根据题目描述,我们可以得到如下结论:

如果是局部倒置,那么一定就是全局倒置。所以,全局倒置是包含局部倒置的。

那么我们就可以将解题视角放在非局部倒置全局倒置上。换句话说,也就是—— 非相邻数字是否满足递增。 具体操作如下图所示:

3.2> 根据偏移的差值来判断

由于题目中已经给出了如下一个关键条件:

数组nums长度为n,并且数字是由0到n-1构成的。

所以,就可以通过nums[i]-i计算出i位置的元素与有序后的位置之间的差值:

差值等于0】表示元素i所在的位置就是排序后的位置。
差值等于1】表示元素1所在的位置向前1位或向后1位。
其他情况】表示元素所在位置偏差大于1位,也就是出现了全局倒置并且非局部倒置的情况。

具体操作如下图所示:

四、代码实现

4.1> 根据前缀的最大值来判断

class Solution {
    public boolean isIdealPermutation(int[] nums) {
        int max = nums[0];
        for (int i = 2; i < nums.length; i++) {
            if (nums[i] < max) return false;
            max = Math.max(max, nums[i - 1]);
        }
        return true;
    }
}

4.2> 根据偏移的差值来判断

class Solution {
    public boolean isIdealPermutation(int[] nums) {
        for (int i = 0; i < nums.length; i++) 
            if (Math.abs(nums[i] - i) > 1) return false;
        return true;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Opencv实战】识别水果的软件叫什么?一款超好用的识别软件分享,一秒鉴定(真是活~久~见~啊)

导语 Hello&#xff0c;大家好呀&#xff01;我是木木子吖&#xff5e; 一个集美貌幽默风趣善良可爱并努力码代码的程序媛一枚。 听说关注我的人会一夜暴富发大财哦——不信你试试&#xff01; 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&…

redis(二)

一、短信登录 1.1导入黑马点评项目 导入黑马点评项目 首先&#xff0c;导入课前资料提供的SQL文件 其中的表有&#xff1a; tb_user&#xff1a;用户表tb_user_info&#xff1a;用户详情表tb_shop&#xff1a;商户信息表tb_shop_type&#xff1a;商户类型表tb_blog&#xf…

Golang入门(1)—— helloworld 初体验

没有多少雄心壮志&#xff0c;就是想在B站上跟一个视频&#xff0c;写一个helloworld 。 还是老配方&#xff0c;还是IDEA&#xff0c;简单的下载了一个go插件之后&#xff0c;就可以new go文件了。然后根据提示下载了一个最新的go版本&#xff0c;设置好环境变量。写了如下&am…

Redis事务相关源码探究

文章目录Redis事务源码解读1、MULTI 声明事务2、命令入队3、EXEC 执行事务4、WATCH 监听变量Redis事务源码解读 源码地址&#xff1a;https://github.com/redis/redis/tree/7.0/src 从源码来简单分析下 Redis 中事务的实现过程 1、MULTI 声明事务 Redis 中使用 MULTI 命令来…

Ubuntu18.04 安装完成后的开发配置

Ubuntu18.04 安装完成后的开发配置1 终端工具2 屏幕录制工具3 屏幕截图工具4 向日葵远程操作与开机自启动设置5 MarkDown笔记工具6 ROS 机器人操作系统安装7 编程开发工具8 机器人仿真环境Gazebo 安装Webots 安装CoppeliaSim 安装Mujuco 安装Pybullet 安装测试平台&#xff1a;…

【c#】前后端分离练习小项目学习笔记----纯干货

c#实现前端页面CRUD结果图涉及到的技术设计流程代码展示总结结果图 涉及到的技术 1、HttpClient请求网络 2、webapi接口用法 3、sqlsugar数据库使用 4、Json序列化、反序列化 设计流程 刚开始做这个小项目&#xff0c;很懵。按照平常中项目的写法&#xff0c;就是先配置好数据…

模式识别与机器学习(更新中)

模式识别与机器学习 使用的教材&#xff0c;PPT为1 公式推导部分直接去看白板推导2&#xff0c;不管是书上还是ppt都写的极其模糊 先说重点&#xff1a; 贝叶斯算概率参数估计 第二讲 贝叶斯学习基础 贝叶斯公式 先验概率是非条件概率 似然概率是给定变量的条件下观测变…

贤鱼的刷题日常--P1665 正方形计数--题目详解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;学习了解–P1665 正方形计数 ✅创作者&#xff1a;贤鱼 ⏰预计时间&#xff1a;5分钟 &#x1f389;个人主页&#xff1a;贤鱼的个人主页 &#x1f525;专栏系列&#xff1a;c &#x1f341;贤鱼的个人社区&#xff0c;欢迎…

基于matlab的瑞利衰落信道建模和仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB预览 4.完整MATLAB程序 1.算法概述 无线信道的小尺度衰弱特征可以分为三大类&#xff1a; 一类是由于多径传播导致短时间内幅度衰落&#xff1b; 一类是由于多径的时延扩展引起时间色散导致的信道衰弱&#xff1b; 一类是由于…

点成分享 | 微流控技术集成系统的应用

一、背景 微流控技术是指把化学和生物等领域中涉及的样品制备、反应、分离、检测、细胞培养、分选、裂解等基本操作单元集成到一块几平方厘米甚至更小的芯片上&#xff0c;由微通道形成网络&#xff0c;以可控流体贯穿整个系统&#xff0c;用以实现常规化学、生物、材料、光学…

SAP UI5 SmartTable 控件的使用介绍试读版

本文来自笔者 SAP 开发技术交流知识星球内一位朋友的提问&#xff1a; smartfilter bar 有个输入框Cost Element绑定了cds实现value help 请问其对应的suggestion功能是通过cds的注解实现的嘛&#xff1f; 要回答这个问题&#xff0c;我们必须首先掌握 SAP UI5 SmartTable 控件…

软考应该如何备考?

首先应该选择软考的科目&#xff0c;软考科目众多&#xff0c;计算机软件资格考试设置了27个专业资格&#xff0c;涵盖5个专业领域&#xff0c; 3个级别层次&#xff08;初级、中级、高级&#xff09;。 首先软考报名是不限学历&#xff0c;经验&#xff0c;资历的&#xff0c;…

cpu设计和实现(iverilog工具)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 编写verilog的工具不少。大家熟知的modelsim、quartus和vivado都可以用来编写的。前者主要是用来仿真&#xff0c;quartus主要用于altera芯片&…

伪元素和伪类的概念和区别

目录 伪类 伪元素 区别&#xff1a; 对于区别的解释&#xff1a; 伪类 这是菜鸟教程下方的一个笔记&#xff0c;看着多但是干货满满。 伪类选择元素基于的是当前元素处于的状态&#xff0c;或者说元素当前所具有的特性&#xff0c;而不是元素的id、class、属性等静态的标志。…

小程序获取不到用户头像和昵称返回微信用户问题解决,即小程序授权获取用户头像规则调整的最新解决方案

最近好多同学在学习石头哥小程序课程的时候&#xff0c;遇到了下面这样的问题&#xff0c;在小程序授权获取用户头像和昵称时&#xff0c;获取到的是下面这样的。 到底是什么原因导致的呢&#xff0c;去小程序官方文档一看&#xff0c;又是官方改规则了。 点进去一看&#x…

超详细!linux系统nlg-eval安装指南

前言&#xff1a;最近在做文本生成的任务&#xff0c;需要用到bleu等评价指标&#xff0c;看到其他研究工作中都在用nlg-eval这个github库&#xff0c;就想把它拿过来用&#xff0c;然而安装过程并不是一帆风顺的&#xff0c;谨以此篇博客记录之&#xff0c;为后来者提供一些经…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-重要参数penalty C

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 正则化是用来防止模型过拟合的过程&#xff0c;常用的有L1正则化和L2正则化两种选项。这个增加的范式&#xff0c;被称为“正则项”&#xff0c;也…

11个开源测试自动化框架,如何选?

以下为作者观点&#xff1a; 如果你正在考虑建立你自己的测试自动化框架&#xff0c;请再想一想。在大多数情况下&#xff0c;你最好可以考虑一个或多个可用的开源选项。 这是因为&#xff0c;一般来说&#xff0c;框架是一套可以跨团队使用的最佳实践、假设、通用工具和库。…

操作符详解(C语言)

算术操作符(运算符)&#xff1a; - * / % 在算术运算符中&#xff0c; - * 跟我们数学中的运算是一样的 在这里主要说一下 / 跟 % 这两个操作符 1、/ &#xff08;除法&#xff09; 在除法运算中&#xff0c;若除号两边的操作数都为整型&#xff0c;则结果…

布隆过滤器(Bloom Filter)

[TOC](布隆过滤器(Bloom Filter)) &#xff08;1&#xff09;什么是布隆过滤器 &#xff08;1&#xff09;布隆过滤器的简单介绍 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以…