Leecode刷题C语言之半有序排列

执行结果:通过

执行用时和内存消耗如下:

 

 

 

代码如下: 

int semiOrderedPermutation(int* nums, int numsSize) {int first = 0, last = 0;for (int i = 0; i < numsSize; i++) {if (nums[i] == 1) {first = i;}if (nums[i] == numsSize) {last = i;}}return first + numsSize - 1 - last - (last < first ? 1 : 0);
}

解题思路: 

这段代码的目的是计算一个特定排列(称为半有序排列)的“调整”次数,使其变成完全有序的排列。具体思路如下:

  1. 初始化变量
    • first 用于记录数字 1 在数组中的位置。
    • last 用于记录数组最大值(即 numsSize)在数组中的位置。
  2. 遍历数组
    • 遍历整个数组 nums,大小为 numsSize
    • 在遍历过程中,更新 first 和 last 的值。当遇到数字 1 时,更新 first 为当前索引 i;当遇到数字等于数组大小 numsSize 时,更新 last 为当前索引 i
  3. 计算调整次数
    • 为了使数组完全有序,理想情况下 1 应该位于第一个位置,而 numsSize 应该位于最后一个位置。
    • 如果 1 不在第一个位置,我们需要将其移动到第一个位置,这需要 first 次移动(如果 1 已经在第一个位置,则不需要移动)。
    • 如果 numsSize 不在最后一个位置,我们需要将其移动到最后一个位置,这需要 numsSize - 1 - last 次移动(因为从 last 位置到最后一个位置之间有 numsSize - 1 - last 个位置)。
    • 还需要考虑 1 和 numsSize 的相对位置:
      • 如果 last 在 first 的左边(即 last < first),在移动 numsSize 到最后一个位置之后,1 前面会有一个空位,所以移动 1 到第一个位置时,实际上只需要将 1 向右移动 first - 1 次(因为 numsSize 已经占据了最后一个位置,所以不需要额外的一次移动来“腾出”最后一个位置给 numsSize)。但这种情况下,我们之前计算移动 numsSize 时已经考虑了 numsSize - 1 - last 次,所以需要在总数中减去 1 来避免重复计算这次“腾出”位置的移动。
      • 如果 last 在 first 的右边或相同位置,则不需要额外处理,直接按照上述计算即可。
  4. 返回结果
    • 返回 first + numsSize - 1 - last - (last < first ? 1 : 0),即 1 到第一个位置需要的移动次数加上 numsSize 到最后一个位置需要的移动次数,再根据 1 和 numsSize 的相对位置决定是否减去 1。

综上所述,这段代码通过计算 1 和数组最大值(numsSize)到它们理想位置所需的最少移动次数,来得到使整个数组有序的“调整”次数。

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

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

相关文章

Wend看源码-DataX

官方文档 GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。 简介 DataX 是由阿里巴巴开源的一款功能强大的 ETL 工具。所谓 ETL&#xff0c;具体涵盖了 Extract&#xff08;抽取&#xff09;、Transform&#xff08;转换&#xff09;以及 Load&#xff0…

Vue.js:代码架构组成与布局设置

前言&#xff1a;最近在弄一个开源的管理系统项目&#xff0c;前后端分离开发&#xff0c;这里对前端的Vue框架做一个总结&#xff0c;有遗漏和错误的地方欢迎大家指出~ &#x1f3e1;个人主页&#xff1a;謬熙&#xff0c;欢迎各位大佬到访❤️❤️❤️~ &#x1f472;个人简介…

静态路由与交换机配置实验

1.建立网络拓扑 添加2台计算机&#xff0c;标签名为PC0、PC1&#xff1b;添加2台二层交换机2960&#xff0c;标签名为S0、S1&#xff1b;添加2台路由器2811&#xff0c;标签名为R0、R1&#xff1b;交换机划分的VLAN及端口根据如下拓扑图&#xff0c;使用直通线、DCE串口线连接…

与 Cursor AI 对话编程:2小时开发报修维修微信小程序

本文记录了如何通过与 Cursor AI 对话&#xff0c;全程不写一行代码的情况下&#xff0c;完成一个完整的报修小程序。整个过程展示了 AI 如何帮助我们&#xff1a; 生成代码 、解决问题、优化实现、完善细节。 先看一下效果图&#xff1a; 一、项目配置 首先我是这样和 AI 对…

汽车车牌标记支持YOLO,COCO,VOC三种格式标记,4000张图片的数据集

本数据集支持YOLO&#xff0c;COCO&#xff0c;VOC三种格式标记汽车车牌&#xff0c;无论是新能源汽车还是油车都能识别标记&#xff0c;该数据集一共包含4000张图片 数据集分割 4000总图像数 训练组 70&#xff05; 2800图片 有效集 20&#xff05; 800图片 测…

共享无人系统,便捷生活触手可得

共享无人系统适用各种无人场景:共享麻将室、共享茶室、共享健身房、共享自习室、共享桌球室&#xff0c;实现线上预约&#xff0c;一键预约&#xff0c;自由组合时间&#xff0c;智能通断电&#xff0c;智能语音提醒。 优惠券是常用的营销工具&#xff0c;后台创建之后发放给会…

使用HTML获取商品详情:技术实现与最佳实践

1. 引言 在电子商务领域&#xff0c;获取商品详情是提升用户体验和增强网站功能性的关键。本文将探讨如何使用HTML结合其他技术手段获取商品详情&#xff0c;并展示如何将这些信息有效地呈现给用户。 2. 理解商品详情页面的结构 在开始编码之前&#xff0c;我们需要了解商品…

怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev

本文引用怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev 在 vscode 设置项中配置 gopls 的 ui.navigation.importShortcut 为 Definition 即可。 "gopls": {"ui.navigation.importShortcut": "Definition" }ui.navigation.i…

从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级

从 Zuul 迁移到 Spring Cloud Gateway&#xff1a;一步步实现服务网关的升级 迁移前的准备工作迁移步骤详解第一步&#xff1a;查看源码第二步&#xff1a;启动类迁移第三步&#xff1a;引入 Gateway 依赖第四步 编写bootstrap.yaml第五步&#xff1a;替换路由配置第六步&#…

【金融贷后】贷后运营精细化管理

文章目录 一、贷后专业术语讲解① 什么是贷后&#xff0c;贷后部是干什么的&#xff1f;② 贷后部门常见组织架构&#xff1f;③ 贷后专业术语有哪些&#xff1f; 二、贷后常用作业手段介绍① 贷后产品形态介绍&#xff1f;② 催收常用的方法&#xff1f; 三、贷后策略岗位介绍…

利用cnocr库完成中文扫描pdf文件的文字识别

很多pdf文件文字识别软件都会收费&#xff0c;免费的网页版可能会带来信息泄露&#xff0c;还有一些类似于腾讯AI和百度AI的接口都有调用次数限制&#xff0c;因此&#xff0c;利用识别正确率极高且免费的cnocr库来自己动手做个pdf文件文字识别程序就是一个很不错的选择。以下程…

论文阅读 -- IDENTIFYING THE RISKS OF LM AGENTS WITHAN LM-EMULATED SANDBOX, ICLR2024

论文链接&#xff1a;https://arxiv.org/pdf/2309.15817 目录 ABSTRACT 1 INTRODUCTION 2 BACKGROUND & PROBLEM STATEMENT 3 CONSTRUCTING TOOLEMU 3.1 EMULATING TOOL EXECUTIONS WITH LANGUAGE MODELS 3.2 DESIGNING AUTOMATIC EVALUATIONS WITH LANGUAGE MODEL…

期末复习-计算机网络篇SCAU

第一章&#xff1a;概述 1.计算机网络的特点&#xff0c;互联网发展的三个阶段 特点&#xff1a;连通性、资源共享 三个阶段&#xff1a; 1969-1990&#xff1a;从单个网络ARPANET向互联网发展 1985-1993&#xff1a;建成了三级结构的互联网 1993-现在&#xff1a;全球范…

TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面

前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中&#xff0c;命令行使用还是不太方便的&#xff0c;因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。 普通用户使用 参照上一篇教…

openGauss开源数据库实战二十一

文章目录 任务二十一 使用JDBC访问openGauss数据库任务目标实施步骤一、准备工作 二、下载并安装JavaSE81 下载JavaSE8安装Java8SE并配置环境变量 三、下载并安装eclipse四、下载并安装openGauss的JDBC驱动包五、使用IDEA编写JDBC测试程序1 使用IDEA的SSH连接虚拟机2 创建项目并…

算法——前缀和

如果我们想要得到数组中一段区间的和最朴素的想法肯定是我们从区间的开始下标遍历到结束下标并累加&#xff0c;但是这显然存在一个问题&#xff0c;时间开销是O&#xff08;n&#xff09;的级别&#xff0c;并且有着大量的重复计算&#xff0c;求[n, m]的和后继续求[n…m…p]区…

可视化建模以及UML期末复习篇----UML图

这是一篇相对较长的文章&#xff0c;如你们所见&#xff0c;比较详细&#xff0c;全长两万字。我不建议你们一次性看完&#xff0c;直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国&#xff01; 一、UML图 总共有如下几种&#xff1a; 用例图&#xff08;Use Ca…

Tableau数据可视化与仪表盘搭建

1.Tableau介绍 可视化功能 数据赋能 数据赋能就是将我们的数据看板发布到我们的线上去 这里的IP地址是业务部门可以通过账号密码登入的 我们也可以根据需要下载&#xff0c;选中并点击下载即可 下载下来之后&#xff0c;自己就能根据数据进行自定义的分析 也可以下载图片 还有…

NanoLog起步笔记-7-log解压过程初探

nonolog起步笔记-6-log解压过程初探 再看解压过程建立调试工程修改makefile添加新的launch项 注&#xff1a;重新学习nanolog的README.mdPost-Execution Log Decompressor 下面我们尝试了解&#xff0c;解压的过程&#xff0c;是如何得到文件头部的meta信息的。 再看解压过程 …

设计模式-装饰器模式(结构型)与责任链模式(行为型)对比,以及链式设计

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.装饰器模式1.1概念1.2作用1.3应用场景1.4特点1.5类与对象关系1.6实现 2责任链模式2.1概念2.2作用2.3应用场景2.4特点2.5类与对象关系2.6实现 3.对比总结 前言…