您的位置:首页 > 文旅 > 旅游 > 镇江网站建设教程_易名域名交易_在线咨询_北京最新疫情情况

镇江网站建设教程_易名域名交易_在线咨询_北京最新疫情情况

2024/12/22 19:29:14 来源:https://blog.csdn.net/m0_67598823/article/details/144395278  浏览:    关键词:镇江网站建设教程_易名域名交易_在线咨询_北京最新疫情情况
镇江网站建设教程_易名域名交易_在线咨询_北京最新疫情情况

题目描述:

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

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

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

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

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

代码思路:

  1. 初始化变量
    • rec:记录交换次数。
    • step:用于遍历和交换元素的索引。
  2. 第一阶段:将1移动到数组的第一个位置
    • 找到数字1在数组中的索引 step
    • 通过一个循环,不断将1向前移动一个位置,直到它到达数组的第一个位置。
    • 每次移动都增加 rec 的值(记录交换次数)。
  3. 第二阶段:将最大元素移动到数组的最后一个位置
    • 找到数组最大元素(这里假设数组的最大元素就是其长度 len(nums),这个假设在一般情况下是不成立的,除非题目有特别说明)的索引 step
    • 通过一个循环,不断将最大元素向后移动一个位置,直到它到达数组的最后一个位置。
    • 每次移动都增加 rec 的值。
  4. 返回结果
    • 返回 rec,即总共的交换次数。

代码实现:

class Solution(object):def semiOrderedPermutation(self, nums):""":type nums: List[int]:rtype: int"""rec = 0step = nums.index(1)while step:nums[step],nums[step-1] = nums[step-1],nums[step]step-=1rec+=1length = len(nums)step = nums.index(len(nums))while step<length-1:nums[step],nums[step+1] = nums[step+1],nums[step]step+=1rec+=1return rec

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com