LeetCode:2717、半有序队列

news/2025/2/28 15:51:23/文章来源:https://www.cnblogs.com/souyou/p/18598933

题目:

给你一个下标从 0 开始、长度为 n 的整数排列 nums

如果排列的第一个数字等于 1 且最后一个数字等于 n ,则称其为 半有序排列 。你可以执行多次下述操作,直到将 nums 变成一个 半有序排列

选择 nums 中相邻的两个元素,然后交换它们。
返回使 nums 变成 半有序排列 所需的最小操作次数。

排列 是一个长度为 n 的整数序列,其中包含从 1n 的每个数字恰好一次。

示例 1:

输入:nums = [2,1,4,3]
输出:2
解释:可以依次执行下述操作得到半有序排列:
1 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
2 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明,要让 nums 成为半有序排列,不存在执行操作少于 2 次的方案。

示例 2:

输入:nums = [2,4,1,3]
输出:3
解释:可以依次执行下述操作得到半有序排列:
1 - 交换下标 1 和下标 2 对应元素。排列变为 [2,1,4,3] 。
2 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
3 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明,要让 nums 成为半有序排列,不存在执行操作少于 3 次的方案。

示例 3:

输入:nums = [1,3,4,2,5]
输出:0
解释:这个排列已经是一个半有序排列,无需执行任何操作。

代码:

初读完题,其实就是个简单的数学问题,只要求最小的数在数组下标0处,最大的数在数组结尾,那么只要先找到数组最小和最大的数的下标位置,它的移动方式是只能交换,那么移动次数自然是下标位置到目标位置的差,这里只需要分类讨论一个最大位置索引在最小位置前面的情况,这时交换移动会重复一次只需-1即可。

点击查看代码
class Solution {
public:int semiOrderedPermutation(vector<int>& nums) {//最小值和最大值索引int minsize = 51;int maxsize = 0;//最小值和最大值int max = 0;int min = 51;//交换次数int num = 0;for (int i = 0; i < nums.size(); i ++){if (nums[i] > max){max = nums[i];maxsize = i;}if (nums[i] < min){min = nums[i];minsize = i;}}num += minsize;num += nums.size() - 1 - maxsize;//最大值索引在最小值前面if (minsize > maxsize)num -= 1;return num;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一图解锁 | 运维管理到工具体系的建设逻辑

本文来自腾讯蓝鲸智云社区用户: CanWay在数字化转型的大潮中,运维作为企业IT架构的关键环节,正面临着前所未有的挑战与机遇。如何利用先进的技术手段,提升运维效率和质量,成为业界关注的焦点。 作为数字研运解决方案的引领者,嘉为蓝鲸在数字化运维方面做了大量探索和尝试,…

基于webGL的云层动画js插件

这是一款基于webGL的云层动画js插件。该插件使用HTML5 canvas 和 WebGL API,生成可控制的多层云彩动画特效。在线演示 下载NPM安装npm install klouds --save 使用方法 ES6语法:import * as klouds from klouds 在页面中引入下面的文件。…

LoadRunner——脚本优化(二)

脚本优化 回放脚本验证成功后,可以进行添加事务、参数化、运行时设置。 事务:根据项目需要,除了衡量整个脚本的性能外,还想获取到脚本中的某一段或几段操作,例如:想知道从单击"login"按钮到显示首页这一登录过程的性能数据,以便更详细的知道具体是用户的哪些动…

用人工智能模型预测股市和加密货币的K线图

前一篇:《从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅》 前言:加密货币市场昨日大幅下跌,一天内市值蒸发逾70亿 人民币。有人可能会问,如果使用人工智能模型预测市场的涨跌,是否能避免损失?作者在此指出,加密货币市场和股市具有高度的主观性,受人为因素、情绪…

RS1MF-ASEMI小家电专用快恢复二极管RS1MF

RS1MF-ASEMI小家电专用快恢复二极管RS1MF编辑:ll RS1MF-ASEMI小家电专用快恢复二极管RS1MF 型号:RS1MF 品牌:ASEMI 封装:SMAF 特性:快恢复二极管 正向电流:1A 反向耐压:1000V 恢复时间:35ns 引脚数量:2 芯片个数:1 芯片尺寸:MIL 浪涌电流:30A 漏电流:10ua 工作温度…

收藏版 | 源码开放,必看的智能监测电源管理教程!

今天我们学习的是快速入门电源管理核心功能 ,手把手教你如何通过不同的技术手段实现有效的电源管理,以低功耗模组Air201为例。今天我们学习的是快速入门电源管理核心功能 ,手把手教你如何通过不同的技术手段实现有效的电源管理,以低功耗模组Air201为例。这些功能旨在提升设…

【GreatSQL优化器-06】条件过滤导致选择非最佳

【GreatSQL优化器-06】条件过滤导致选择非最佳 一、condition_fanout_filter导致计划非最佳 GreatSQL 的优化器对于 join 的表需要根据行数和 cost 来确定最后哪张表先执行哪张表后执行,这里面就涉及到预估满足条件的表数据,condition_fanout_filter会根据一系列方法计算出一…

Python异步编程(上):协程和任务

原文链接: https://mp.weixin.qq.com/s/dQOocc7wHaGv7_cf476Ivg 介绍 了解异步编程前先了解一些概念:协程(coroutine)、任务(task)和事件循环(event loop),在3.7以前还需要关心Future这个东西,不过之后提供的高级API弱化了这个概念,你基本不需要关心Future是什么。 协程 协…

ADC_DMA

功能实现:ADC DMA方式循环采样。 采集周期:(256-192)*16*Tsys = (256-192)*16/62.4M = 16.5us 进中断周期:16.5us*采集数据 = 16.5us int main() {uint8_t i;signed short RoughCalib_Value = 0; // ADC粗调偏差值uint32_t temp = 0;uint8_t adcchidx = 0;HSECFG_C…

销售精英的十大核心:解锁成功之路的钥匙

认真 一个秉持认真态度的人,其核心特质在于严谨。这份严谨引领我们向更优方向、更高目标迈进。若在职场上全力以赴,辛劳感将逐渐淡化。掌握这一要诀,便如同握有通往成功之门的金钥匙。 自我驱动力 销售工作因其特性,常面临客户的拒绝与打击,失败远多于成功。自我驱动力不足…

【随手记录】org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length

org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length启动spring boot项目报以上错误,原因是:YAML文件的编码格式导致的 ,可以通过setting调整编码格式,统一为UTF-8:

html页面中如何实现gif图片重新播放?

有几种方法可以实现在 HTML 页面中重新播放 GIF 图片:使用 JavaScript 重新加载 GIF: 这是最常见和最简单的方法。通过操作 GIF 的 src 属性,可以强制浏览器重新加载图像,从而重新开始动画。 function reloadGif(imgElement) {imgElement.src = imgElement.src; }// HTML 中…