【问题标题】:Python program Terminated due to timeout - HackerRankPython 程序因超时而终止 - HackerRank
【发布时间】:2018-03-03 03:21:11
【问题描述】:

我正在尝试解决来自 HackerRank 的问题,当我提交解决方案时,我收到一条错误消息,指出“因超时而终止”。

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

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

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

输入格式

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

输出格式

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

示例输入

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=' ')

【问题讨论】:

  • 您可以使用 Python 的数组切片:a[k:] + a[:k]
  • @MOehm ,最好对k % n进行切片。已经解释here

标签: python arrays algorithm


【解决方案1】:
>>> 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'

【讨论】:

    【解决方案2】:

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

    首先,分析问题及其在各种输出中的表现。那么让我们来分析一下:

    假设一个包含 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
    

    【讨论】:

      【解决方案3】:
      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=' ')
      

      【讨论】:

        猜你喜欢
        • 2018-03-26
        • 2018-10-22
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 1970-01-01
        • 1970-01-01
        • 2018-10-20
        • 1970-01-01
        相关资源
        最近更新 更多