使用Python怎么实现一个旋转数组功能算法

  介绍

本文章向大家介绍使用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)>

代码如下:

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) % 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怎么实现一个旋转数组功能算法