給定一個由n個元素構成的一維數組,以及如何有效地旋轉數組,以使數組中的元素左移m個位置?僅使用常量O(1)內存,是否有可能在O(n)時間複雜度下執行此操作?使用常量內存旋轉m個位置左邊的n個元素的一維數組?
例如,如果n = 8,並且您的數組是[0, 1, 2, 3, 4, 5, 6, 7]
,並且您將它向左旋轉m = 2,則會得到[2, 3, 4, 5, 6, 7, 0, 1]
。
這是我在Python中實現的一個天真的解決方案,它使用O(n)時間和O(n)內存與臨時數組。
def rotateLeft(A, m):
temp = [None]*len(A)
for i in xrange(len(temp)):
temp[i] = A[(i + m) % len(A)]
for i in xrange(len(A)):
A[i] = temp[i]
我怎麼能更有效地做到這一點?我被告知這可以用恆定的內存來完成,並且仍然在O(n)時間。
任何語言的解決方案都可以,任何建議都非常值得歡迎。
編輯:我不是在尋找圖書館解決方案。此外,該數組不是鏈接列表/雙端隊列。沒有頭/尾/下一個/前一個元素的概念。
您是否需要專門使用數組?如果你使用了一個LionkedList,你可以在一段時間內完成它:1)從列表的最後一個元素指向第一個元素,2)從第一個元素指向第二個元素。 – LuigiEdlCarno
@LuigiEdlCarno是的,它需要使用一個數組。否則解決方案將是微不足道的。 :) – Shashank