Python中如何实现旋转数组,有几种方法
Admin 2022-07-14 群英技术资讯 593 次浏览
下面是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 的长度取余,就是最终我们需要移动的位置
代码如下:
if nums: 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) ,取余
代码如下:
if nums: k = k % len(nums) while k > 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),取余操作,减少重复的次数。
代码如下:
if nums: old_nums = nums[:] l = len(nums) for x in range(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]
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了pytorch 实现打印网络回传梯度的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
通常来说groupby操作可以分为三部分:分割数据,应用变换和和合并数据,本文将会详细讲解Pandas中的groupby操作,感兴趣的朋友一起看看吧
圆周率没有精确的计算公式,所以只能用近似的方式计算它的近似值。这篇文章主要介绍了利用Python计算圆周率π的相关资料,需要的朋友可以参考下
这篇文章主要介绍了Python实现五子棋人机对战 和人人对战,通过定义黑白子,落子位置以及获胜规则展开详细内容,需要的小伙伴可以参考一下
Pytorch的数据加载一般是用torch.utils.data.Dataset与torch.utils.data.Dataloader两个类联合进行。我们需要继承Dataset来定义自己的数据集类,然后在训练时用Dataloader加载自定义的数据集类。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008