Python程序因超时而终止-HackerRank

妮基·苏沃卡(Nikhil Suwalka)

我试图解决来自HackerRank的问题,当我提交解决方案时,出现错误消息“由于超时而终止”。

请检查代码并建议我如何进行优化。

问题:对n个大小的数组的左旋转操作会将数组元素中的每个元素向左移动1个单位。例如,如果对数组[1,2,3,4,5]进行2次左旋转,则该数组将变为[3,4,5,1,2]。

给定一个由n个整数和一个数字d组成的数组,请对该数组执行d个左旋转。然后将更新后的数组打印为单行以空格分隔的整数。

输入格式

第一行包含两个以空格分隔的整数,分别表示n(整数的数量)和d(必须执行的向左旋转的数量)的值。第二行包含用空格分隔的整数,这些整数描述了数组初始状态的各个元素。

输出格式

在执行d次左旋转后,打印一行n个以空格分隔的整数,这些整数表示数组的最终状态。

样本输入

5 4 1 2 3 4 5

样本输出

5 1 2 3 4

说明

当我们执行d = 4左旋转时

因此,我们将数组的最终状态打印为单行以空格分隔的值,即5 1 2 3 4。

我的代码:

def array_left_rotation(ar, n, k):
    for j in range(k):
        temp = ar[0]
        for i in range(0,n-1):
            ar[i] = ar[i+1]
        ar[n-1] = temp
    return ar
n, k = map(int, input().strip().split(' '))
a = list(map(int, input().strip().split(' ')))
answer = array_left_rotation(a, n, k);
print(*answer, sep=' ')
考希克NP

这里最好的方法是不要自己真正执行操作。在这种情况下,您将手动旋转列表,这是不必要的计算。

因此,首先,分析问题及其在各种输出中的行为。因此,让我们分析一下:

假设包含5个元素的数组

array = [1,2,3,4,5]

如果旋转2 times,则会得到:

[3,4,5,1,2]

现在,尝试7 times对原始数组进行相同的旋转您再次得到:

[3,4,5,1,2]

类似的试验将看到这种模式的出现。即,对于,旋转k times相同k % n times

现在我们有了这些,进入计算部分。为此,只需使用list slicing来获得旋转,如下所示:

#n -> number of elements in array
#k -> number of rotations to be performed
#a -> (list) array

def rotate(a,n,k) :
    rotations = k % n
    new_array = a[rotations:] + a[:rotations]

    return new_array

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章