2026-10-17:划分数组的最少相邻交换次数。用go语言,给定一个整数序列 nums,以及两个整数 a、b,且 a 小于 b。我们希望把 nums 调整成这样的顺序:从头到尾可以划分成三个连续区间
2026-10-17划分数组的最少相邻交换次数。用go语言给定一个整数序列 nums以及两个整数 a、b且 a 小于 b。我们希望把 nums 调整成这样的顺序从头到尾可以划分成三个连续区间区间允许为空。第一个区间里的所有数都小于 a第二个区间里的所有数都落在 a 到 b 之间包含 a 和 b第三个区间里的所有数都大于 b。一次操作只能交换两个相邻元素。求让 nums 变成上述形式所需的最少相邻交换次数。如果次数很大返回它对 1,000,000,007 取模后的结果。1 nums.length 100000。1 nums[i] 1000000000。1 a b 1000000000。输入 nums [9,7,5,3], a 4, b 8。输出 5。解释一种最佳交换序列如下交换 nums[2] 和 nums[3]。数组变为 [9, 7, 3, 5]。交换 nums[1] 和 nums[2]。数组变为 [9, 3, 7, 5]。交换 nums[0] 和 nums[1]。数组变为 [3, 9, 7, 5]。交换 nums[1] 和 nums[2]。数组变为 [3, 7, 9, 5]。交换 nums[2] 和 nums[3]。数组变为 [3, 7, 5, 9]。这个数组是好数组因为它可以分为 [3]、[7, 5] 和 [9]。题目来自力扣3994。大体步骤如下先把数组中的每个元素按大小归成三类第一类小于 a 的元素最终应该排在最前面。第二类在闭区间 [a, b] 内的元素最终应该排在中间。第三类大于 b 的元素最终应该排在最后面。因为题目允许三个部分为空所以不需要三类都出现只要最终顺序满足“第一类在前、第二类在中、第三类在后”即可。目标形态就是所有第一类元素排在左边所有第二类元素排在中间所有第三类元素排在右边。同一类元素内部谁前谁后无所谓因为题目只要求三个连续部分的类别正确。相邻交换的本质与逆序对有关一次相邻交换最多只能消除一个“逆序对”。所谓逆序对就是按最终类别顺序来看本来应该排在后面的元素却出现在了前面。因此最少相邻交换次数就等于当前数组中所有跨类别的逆序对数量。同类别元素之间不需要交换因为它们的相对顺序不影响结果。代码使用一次从左到右的扫描来统计这些逆序对。扫描时维护两个计数第一个计数已经扫描过的第二类元素个数也就是落在 [a, b] 内的元素个数。第二个计数已经扫描过的第三类元素个数也就是大于 b 的元素个数。同时用一个变量累计需要的交换次数。对当前扫描到的元素分情况处理如果当前元素小于 a即属于第一类它最终应该排在最前面。但前面已经扫描过的第二类元素和第三类元素最终都应该排在它后面。因此前面每一个第二类元素和每一个第三类元素都会和当前这个第一类元素构成逆序对。所以把“已扫描的第二类个数 已扫描的第三类个数”累加到交换次数中。如果当前元素在 [a, b] 内即属于第二类它最终应该排在第三类前面。前面已经扫描过的第三类元素最终都应该排在它后面。因此前面每一个第三类元素都会和当前这个第二类元素构成逆序对。所以把“已扫描的第三类个数”累加到交换次数中。然后把第二类元素的计数加一。如果当前元素大于 b即属于第三类它最终应该排在最后面。前面已经扫描过的第一类和第二类元素最终都应该排在它前面所以它不会和前面的元素形成逆序对。因此交换次数不增加只需要把第三类元素的计数加一。这样扫描完整个数组后累计得到的交换次数就是所有跨类别逆序对的总数也就是最少相邻交换次数。由于答案可能很大最后要对 1,000,000,007 取模。以题目例子说明nums [9, 7, 5, 3]a 4b 8。分类结果9 大于 8属于第三类7 在 [4, 8] 内属于第二类5 在 [4, 8] 内属于第二类3 小于 4属于第一类。从左到右扫描遇到 9第三类第三类计数变为 1交换次数不变。遇到 7第二类前面有 1 个第三类交换次数加 1累计为 1第二类计数变为 1。遇到 5第二类前面有 1 个第三类交换次数加 1累计为 2第二类计数变为 2。遇到 3第一类前面有 2 个第二类和 1 个第三类交换次数加 3累计为 5。所以最少相邻交换次数是 5。取模后仍然是 5。总的时间复杂度整个算法只从左到右遍历数组一次每个元素只做常数次判断和累加操作所以时间复杂度是 O(n)其中 n 是数组长度。总的额外空间复杂度算法只使用了几个变量来记录计数和累计交换次数没有额外创建与数组长度相关的数据结构所以额外空间复杂度是 O(1)。输入数组本身不计入额外空间。因此总的时间复杂度是 O(n)总的额外空间复杂度是 O(1)。Go完整代码如下packagemainimport(fmt)funcminAdjacentSwaps(nums[]int,a,bint)(ansint){constmod1_000_000_007cnt1,cnt2:0,0for_,x:rangenums{ifxa{// x 视作 0anscnt1cnt2}elseifxb{// x 视作 1anscnt2 cnt1}else{// x 视作 2cnt2}}returnans%mod}funcmain(){nums:[]int{9,7,5,3}a:4b:8result:minAdjacentSwaps(nums,a,b)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defmin_adjacent_swaps(nums,a,b):MOD1_000_000_007cnt10cnt20ans0forxinnums:ifxa:# 视作 0anscnt1cnt2elifxb:# 视作 1anscnt2 cnt11else:# 视作 2cnt21returnans%MODif__name____main__:nums[9,7,5,3]a4b8resultmin_adjacent_swaps(nums,a,b)print(result)C完整代码如下#includeiostream#includevectorusingnamespacestd;intminAdjacentSwaps(constvectorintnums,inta,intb){constintMOD1000000007;longlongans0;intcnt10,cnt20;for(intx:nums){if(xa){// x 视作 0anscnt1cnt2;}elseif(xb){// x 视作 1anscnt2;cnt1;}else{// x 视作 2cnt2;}}returnstatic_castint(ans%MOD);}intmain(){vectorintnums{9,7,5,3};inta4;intb8;intresultminAdjacentSwaps(nums,a,b);coutresultendl;return0;}

相关新闻

国产大模型接入OpenAI协议路由中间件

国产大模型接入OpenAI协议路由中间件

1. 项目概述:一个真实存在的“夹心层”需求催生的路由中间件你有没有遇到过这种场景:团队里跑着一套成熟的国外 harness 框架——可能是某开源大模型服务编排平台,也可能是某企业自研的 AI 工作流引擎,它设计精良、API 规范、生态…

2026/10/18 22:11:30 阅读更多 →
基于网络的入侵检测系统源码包跑通与规则调优指南

基于网络的入侵检测系统源码包跑通与规则调优指南

简介:基于网络的入侵检测系统完整源码与配套资料,面向网络工程、信息安全方向的学生,可满足毕业设计、期末大作业或课程设计的实战需求。资源围绕报文捕获、协议解析和入侵检测告警等核心环节展开,既有可编译运行的C语言实现&…

2026/10/18 22:11:30 阅读更多 →
深度强化学习DEQN微电网能量调度实战:从环境建模到成本优化

深度强化学习DEQN微电网能量调度实战:从环境建模到成本优化

做过微电网能量管理的人,应该都体会过这种尴尬:光伏出力一会儿猛涨一会儿暴跌,电价一天好几个峰谷,储能电池的SOC稍微没控好就到限,还要在“多买电”和“少卖电”之间反复权衡。传统规则策略写了几十条if-else&#xf…

2026/10/18 22:10:29 阅读更多 →

最新新闻

OpenCowork 实测:支持本地文件、飞书机器人的 Windows AI 助手(只需配置 Token)

OpenCowork 实测:支持本地文件、飞书机器人的 Windows AI 助手(只需配置 Token)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:02:49 阅读更多 →
从Excel失控到自研轻量CRM:小团队客户管理实战复盘

从Excel失控到自研轻量CRM:小团队客户管理实战复盘

我最早有做 DeskcommCRM 这个项目的冲动,是因为团队里的客户信息已经乱到让人不敢打开共享盘:业务员各自维护 Excel,客服组的工单记录又是另一套系统,管理层想看一个客户的完整往来记录,得找三个人要三份文件&#xff…

2026/10/19 0:01:48 阅读更多 →
Claude Desktop 数据搬家教程(C盘 → D盘):用 robocopy 与 mklink 把数据目录改到 TaoToken

Claude Desktop 数据搬家教程(C盘 → D盘):用 robocopy 与 mklink 把数据目录改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:01:48 阅读更多 →
openclaw.net 集成 ElBruno.MempalaceNet 记忆系统:把 MCP 配置改到 TaoToken 的完整实践

openclaw.net 集成 ElBruno.MempalaceNet 记忆系统:把 MCP 配置改到 TaoToken 的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:01:48 阅读更多 →
GPT-6 Sol 与 Luna 怎么选?Chat、Work、Codex 版本差异与 TaoToken 接入实测

GPT-6 Sol 与 Luna 怎么选?Chat、Work、Codex 版本差异与 TaoToken 接入实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:01:48 阅读更多 →
VSCode开发UNI-APP配置教程:TaoToken统一Key接入与插件推荐

VSCode开发UNI-APP配置教程:TaoToken统一Key接入与插件推荐

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →