当前位置: 首页 > news >正文

Leetcode2717:半有序排列

题目描述:

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

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

  • 选择 nums 中相邻的两个元素,然后交换它们。

返回使 nums 变成 半有序排列 所需的最小操作次数。

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

代码思路:

  1. 获取列表长度
    • 首先,通过 n = len(nums) 获取列表 nums 的长度。
  2. 计算数字 n(最大值)的位置
    • 使用 nums.index(n) 找到数字 n(即列表中的最大值)的索引。
    • 计算 count1 = n - 1 - nums.index(n),这个值表示数字 n 需要向右移动多少个位置才能到达列表的末尾(因为所有较大的数都应该位于末尾)。这里减 1 是因为索引是从 0 开始的,而我们要计算的是位置差。
  3. 移除数字 n
    • 使用 nums.remove(n) 从列表中移除数字 n,因为我们接下来要计算数字 1 的位置,而 n 已经不在考虑范围内了。
  4. 计算数字 1 的位置
    • 使用 nums.index(1) 找到数字 1 的索引(在移除 n 之后)。
    • 这个索引值直接作为 count2,表示数字 1 需要向左移动多少个位置才能到达列表的开头(因为所有较小的数都应该位于开头)。
  5. 返回结果
    • 返回 count1 + count2,即数字 n 移动到末尾和数字 1 移动到开头所需的最小交换次数之和。

注意事项

  • 这个方法假设输入列表 nums 包含了从 1 到 n 的所有整数,且每个整数只出现一次。
  • 方法通过直接计算数字 n 和 1 需要移动的位置来确定最小交换次数,而不是通过实际的交换操作来模拟。
  • 移除数字 n 是为了简化计算数字 1 位置的过程,因为一旦 n 到达了正确的位置(即列表末尾),它就不会再影响数字 1 的位置计算。

代码实现:

class Solution:
    def semiOrderedPermutation(self, nums) :
        n = len(nums)
        count1 = n - 1 -(nums.index(n))
        nums.remove(n)
        count2 = nums.index(1)
        return count1 + count2

 

相关文章:

  • 【原创工具】同文件夹PDF文件合并 By怜渠客
  • 安全见闻4
  • 多功能免费网络测速及问题诊断工具
  • 【C++】:STL详解 —— vector类
  • C++知识整理day9——继承(基类与派生类之间的转换、派生类的默认成员函数、多继承问题)
  • Linux(Centos 7.6)命令详解:uniq
  • 【愚公系列】《Python网络爬虫从入门到精通》034-DataFrame简单数据计算整理
  • 表单制作代码,登录动画背景前端模板
  • 2025网络安全等级测评报告,信息安全风险评估报告(Word模板)
  • DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库
  • win11 24h2 远程桌面 频繁断开 已失去连接 2025
  • 通过Python编程语言实现“机器学习”小项目教程案例
  • Ollama微调
  • 猿大师播放器:网页内嵌VLC/FFPlayer在Web端直接播放RTSP/RTMP/H.265视频流
  • (Arrow)试时间处理变得更简单
  • 【Linux Oracle】time命令+oracle exp压缩
  • 分享httprunner 结合django实现平台接口自动化方案
  • QT各种版本下载安装
  • 【初阶数据结构】星河中的光影 “排” 象:排序(下)
  • 计算机网络————(三)
  • 东山县城乡规划建设局网站/营销咨询公司排名
  • 建设网站需要学什么程序/网站优化推广招聘
  • 徐州 网站建设/免费推广工具
  • 北京网站建设哪个好/2024年瘟疫大爆发
  • web网站百度不收录吗/深圳抖音推广公司
  • 凡科的模板做网站/品牌广告语