您的位置:首页 > 财经 > 金融 > 河北秦皇岛黄金海岸_长春新闻网_关键词优化搜索排名_宁波网络推广团队

河北秦皇岛黄金海岸_长春新闻网_关键词优化搜索排名_宁波网络推广团队

2025/3/10 22:51:44 来源:https://blog.csdn.net/m0_67598823/article/details/145863328  浏览:    关键词:河北秦皇岛黄金海岸_长春新闻网_关键词优化搜索排名_宁波网络推广团队
河北秦皇岛黄金海岸_长春新闻网_关键词优化搜索排名_宁波网络推广团队

题目描述:

给你一个下标从 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

 

版权声明:

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

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