[英]Python program Terminated due to timeout - HackerRank
我正在尝试解决来自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=' ')
这里最好的方法是不要自己真正执行操作。 在这种情况下,您将手动旋转列表,这是不必要的计算。
因此,首先,分析问题及其在各种输出中的行为。 因此,让我们分析一下:
假设包含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
>>> a = [1, 2, 3, 4, 5]
>>> a[2:] + a[:2]
[3, 4, 5, 1, 2]
>>> ' '.join(str(i) for i in (a[2:] + a[:2]))
'3 4 5 1 2'
>>>
>>> def rotate_list(array, d):
... return array[d:] + array[:d]
>>>
>>> ' '.join(str(i) for i in rotate_list([1, 2, 3, 4, 5], 4))
... '5 1 2 3 4'
number_of_elements = int(input("Enter the number of elements to be inserted in array:"))
rotations = int(input("Enter the number of rotations:"))
array = []
for i in range(number_of_elements):
number = int(input("Enter a number:"))
array.append(number)
array = array[rotations:] + array[:rotations]
print(*array, end=' ')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.