本文章向大家介绍使用Python怎么实现一个旋转数组功能算法的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Python可以做什么
Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂,容易入门,功能强大,在许多领域中都有广泛的应用,例如最热门的大数据分析,人工智能,网页开发等。
<强>一、题目强>
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。
例1:
输入:[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]例2:
输入:(-100,99)和k=2
引用>
输出:(99,-100)
解释:
向右旋转1步:(99,-100,3)
向右旋转2步:(99,-100)<强>说明:强>
1。尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
2。要求使用空间复杂度为O(1)的原地算法。<强>二、解法强>
<>强解法一强>
以倒数第k个值为分界线,把num截成两组再组合。因为k可能大于num的长度(当这两者相等的时候,就相当于num没有移动),所以我们取<代码> k % len (num)> 代码,k和num的长度取余,就是最终我们需要移动的位置
代码如下:
if num: k 才能=,k %, len (num) num才能[:]=num [- k:] + num (: - k)时间:64毫秒,击败了98%
引用>附:本机测试示例代码:
#, - *安康;编码:utf-8 - * - num=, (1、2、3、4、5、6、7) k =3 if num: k 才能=,k %, len (num) num才能[:]=num [- k:] + num [- k): 打印(num)运行结果:
(5、6、7、1、2、3、4]
引用><强>解法二强>
先把num最后一位移动到第一位,然后删除最后一位,循环k次。<代码> k=k % len (num)> 代码,取余
代码如下:
if num: k 才能=,k %, len (num) while 才能;k 祝辞,0: ,,,k -=1 ,,,nums.insert (0,, num [1]) ,,,nums.pop ()时间:172毫秒,击败了16%
引用>附:本机测试示例代码:
#, - *安康;编码:utf-8 - * - num=, (1、2、3、4、5、6、7) k =3 if num: k 才能=,k %, len (num) while 才能;k 祝辞,0: ,,,k -=1 ,,,nums.insert (0,, num [1]) ,,,nums.pop () 打印(num)运行结果:
(5、6、7、1、2、3、4]
引用><强>解法三强>
先把num复制到old_nums,然后num中索引为x的元素移动k个位置后,当前索引为x + k,其值为<代码> old_nums [x]> 代码。,所以我们把x + k处理成<代码> (x + k) % len (num)> 代码,取余操作,减少重复的次数。
代码如下:
if num: old_nums 才能=,num [:] l 才能=,len (num) for 才能;x 拷贝范围(左): ,,,num [(x + k), %, l],=, old_nums [x]时间:64毫秒,击败了98%
引用>附:本机测试示例代码:
#, - *安康;编码:utf-8 - * - num=, (1、2、3、4、5、6、7) k =3 if num: old_nums 才能=,num [:] l 才能=,len (num) for 才能;x 拷贝范围(左): ,,,num [(x + k), %, l],=, old_nums [x] 打印(num)运行结果:
(5、6、7、1、2、3、4]
引用>使用Python怎么实现一个旋转数组功能算法