如何实现Python3中三种数组旋转算法的实例代码?

2026-05-16 21:421阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计845个文字,预计阅读时间需要4分钟。

如何实现Python3中三种数组旋转算法的实例代码?

Python3实现旋转数组的3种算法及下面是Python3实现的旋转数组的3种算法:

1.题目:给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。

例如:输入:[1,2,3,4,5,6,7] 和 k=3

2.方法一:使用额外的数组

1. 创建一个长度与原数组相同的临时数组 2. 将原数组从后往前复制到临时数组的前k个位置 3. 将原数组从前往后复制到临时数组的剩余位置 4. 将临时数组复制回原数组

3.方法二:三次翻转

1. 翻转整个数组 2. 翻转数组的前k个元素 3. 翻转数组的剩余元素

4.方法三:使用一个循环

1. 初始化一个空数组result 2. 遍历原数组,将每个元素添加到result中,索引为(索引+k)%数组长度 3. 将result复制回原数组

Python3实现旋转数组的3种算法

下面是Python3实现的旋转数组的3种算法。

一、题目

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

例如:

输入: [1,2,3,4,5,6,7] 和 k = 3

输出: [5,6,7,1,2,3,4]

解释:

向右旋转 1 步: [7,1,2,3,4,5,6]

向右旋转 2 步: [6,7,1,2,3,4,5]

向右旋转 3 步: [5,6,7,1,2,3,4]

说明:

1.尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。

2.要求使用空间复杂度为 O(1) 的原地算法。

二、解题算法

解法一

以倒数第 k 个值为分界线,把 nums 截成两组再组合。因为 k 可能大于 nums 的长度(当这两者相等的时候,就相当于 nums 没有移动),所以我们取 k % len(nums),k 和 nums 的长度取余,就是最终我们需要移动的位置

代码如下:

ifnums: k=k%len(nums) nums[:]=nums[-k:]+nums[:-k]

时间:64ms

假设:

nums= [1,2,3,4,5,6,7]

k =3

运行结果:

[5, 6, 7, 1, 2, 3, 4]

解法二

先把 nums 最后一位移动到第一位,然后删除最后一位,循环k次。k = k % len(nums) ,取余

代码如下:

如何实现Python3中三种数组旋转算法的实例代码?

ifnums: k=k%len(nums) whilek>0: k-=1 nums.insert(0,nums[-1]) nums.pop()

时间:172ms

假设:

nums= [1,2,3,4,5,6,7]

k =3

运行结果:

[5, 6, 7, 1, 2, 3, 4]

解法三

先把 nums 复制到 old_nums ,然后 nums 中索引为 x 的元素移动 k 个位置后,当前索引为 x+k,其值为 old_nums[x]。,所以我们把 x+k 处理成 (x+k)%len(nums),取余操作,减少重复的次数。

代码如下:

ifnums: old_nums=nums[:] l=len(nums) forxinrange(l): nums[(x+k)%l]=old_nums[x]

时间:64ms

假设:

nums= [1,2,3,4,5,6,7]

k =3

运行结果:

[5, 6, 7, 1, 2, 3, 4]

到此这篇关于实现Python3数组旋转的3种算法实例的文章就介绍到这了,更多相关3种算法实现Python3数组的旋转内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

本文共计845个文字,预计阅读时间需要4分钟。

如何实现Python3中三种数组旋转算法的实例代码?

Python3实现旋转数组的3种算法及下面是Python3实现的旋转数组的3种算法:

1.题目:给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。

例如:输入:[1,2,3,4,5,6,7] 和 k=3

2.方法一:使用额外的数组

1. 创建一个长度与原数组相同的临时数组 2. 将原数组从后往前复制到临时数组的前k个位置 3. 将原数组从前往后复制到临时数组的剩余位置 4. 将临时数组复制回原数组

3.方法二:三次翻转

1. 翻转整个数组 2. 翻转数组的前k个元素 3. 翻转数组的剩余元素

4.方法三:使用一个循环

1. 初始化一个空数组result 2. 遍历原数组,将每个元素添加到result中,索引为(索引+k)%数组长度 3. 将result复制回原数组

Python3实现旋转数组的3种算法

下面是Python3实现的旋转数组的3种算法。

一、题目

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

例如:

输入: [1,2,3,4,5,6,7] 和 k = 3

输出: [5,6,7,1,2,3,4]

解释:

向右旋转 1 步: [7,1,2,3,4,5,6]

向右旋转 2 步: [6,7,1,2,3,4,5]

向右旋转 3 步: [5,6,7,1,2,3,4]

说明:

1.尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。

2.要求使用空间复杂度为 O(1) 的原地算法。

二、解题算法

解法一

以倒数第 k 个值为分界线,把 nums 截成两组再组合。因为 k 可能大于 nums 的长度(当这两者相等的时候,就相当于 nums 没有移动),所以我们取 k % len(nums),k 和 nums 的长度取余,就是最终我们需要移动的位置

代码如下:

ifnums: k=k%len(nums) nums[:]=nums[-k:]+nums[:-k]

时间:64ms

假设:

nums= [1,2,3,4,5,6,7]

k =3

运行结果:

[5, 6, 7, 1, 2, 3, 4]

解法二

先把 nums 最后一位移动到第一位,然后删除最后一位,循环k次。k = k % len(nums) ,取余

代码如下:

如何实现Python3中三种数组旋转算法的实例代码?

ifnums: k=k%len(nums) whilek>0: k-=1 nums.insert(0,nums[-1]) nums.pop()

时间:172ms

假设:

nums= [1,2,3,4,5,6,7]

k =3

运行结果:

[5, 6, 7, 1, 2, 3, 4]

解法三

先把 nums 复制到 old_nums ,然后 nums 中索引为 x 的元素移动 k 个位置后,当前索引为 x+k,其值为 old_nums[x]。,所以我们把 x+k 处理成 (x+k)%len(nums),取余操作,减少重复的次数。

代码如下:

ifnums: old_nums=nums[:] l=len(nums) forxinrange(l): nums[(x+k)%l]=old_nums[x]

时间:64ms

假设:

nums= [1,2,3,4,5,6,7]

k =3

运行结果:

[5, 6, 7, 1, 2, 3, 4]

到此这篇关于实现Python3数组旋转的3种算法实例的文章就介绍到这了,更多相关3种算法实现Python3数组的旋转内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!