Python程式:查詢將所有球移動到每個盒子的最小操作次數
假設我們有一個名為 boxes 的二進位制字串,其中 boxes[i] 為 '0' 表示第 i 個盒子為空,'1' 表示它包含一個球。現在,在一個操作中,我們可以將一個球從一個盒子移動到相鄰的盒子。這樣做之後,某些盒子中可能有多個球。我們必須找到一個大小為 n 的陣列 answer,其中 answer[i] 是將所有球移動到第 i 個盒子的最小操作次數。
因此,如果輸入類似於 boxes = "1101",則輸出將為 [4, 3, 4, 5]
要將所有球放在第一個盒子上,我們必須從 box2 中取一個球,需要一次操作,從最後一個球取,需要三次操作,所以總共 4 次操作。
要將所有球放在第二個盒子上,我們必須從 box1 中取一個球,需要一次操作,從最後一個球取,需要兩次操作,所以總共 3 次操作。
要將所有球放在第三個盒子上,我們必須從 box2 和最後一個盒子分別取一個球,各需要一次操作,從 box1 取,需要兩次操作,所以總共 4 次操作。
要將所有球放在最後一個盒子上,我們必須從 box1 取,需要三次操作,從 box2 取,需要兩次操作,所以總共 5 次操作。
為了解決這個問題,我們將遵循以下步驟:
left := 0,right := 0,dist := 0
對於範圍從 0 到 boxes 大小 - 1 的 i,執行以下操作:
如果 boxes[i] 與 "1" 相同,則:
dist := dist + i
如果 i 與 0 相同,則:
left := left + 1
否則:
right := right + 1
arr := 一個列表,最初將 dist 放入其中
對於範圍從 1 到 boxes 大小 - 1 的 i,執行以下操作:
在 arr 的末尾插入 arr[i-1] + left - right
如果 boxes[i] 與 "1" 相同,則:
left := left + 1
right := right - 1
返回 arr
示例
讓我們看看下面的實現,以便更好地理解:
def solve(boxes):
left = 0
right = 0
dist = 0
for i in range(len(boxes)):
if boxes[i] == "1":
dist += i
if i == 0:
left += 1
else:
right += 1
arr = [dist]
for i in range(1, len(boxes)):
arr.append(arr[i-1] + left - right)
if boxes[i] == "1":
left += 1
right -= 1
return arr
boxes = "1101"
print(solve(boxes))輸入
"1101"
輸出
[4, 3, 4, 5]
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP