Python程式:查詢將所有球移動到當前位置所需的總距離列表
假設我們有一個名為 nums 的二進位制列表,其中只包含 0 和 1,其中 0 表示空單元格,1 表示單元格被球填充。我們必須找到一個新的列表,例如 L,其大小也與 nums 大小相同,其中 L[i] 設定為將所有球移動到 L[i] 所需的總距離。這裡,將球從索引 j 移動到索引 i 的距離是 |j - i|。
因此,如果輸入類似於 nums = [1, 1, 0, 1],則輸出將為 [4, 3, 4, 5],因為
- L[0] = |0 - 0| + |1 - 0| + |3 - 0|
- L[1] = |0 - 1| + |1 - 1| + |3 - 1|
- L[2] = |0 - 2| + |1 - 2| + |3 - 2|
- L[3] = |0 - 3| + |1 - 3| + |3 - 3|
因此,要將所有球移動到 L[1],我們必須將索引 0 處的球移動到 1,距離為 1,並將索引 3 處的球移動到 1,距離為 2。
為了解決這個問題,我們將遵循以下步驟:
- 如果 nums 為空,則
- 返回一個新列表
- left_count := 0
- right_count := 0
- left_sum := 0
- right_sum := 0
- result := 一個新列表
- 對於 nums 中的每個索引和值 num,執行以下操作:
- 如果 num 非零,則
- right_count := right_count + 1
- right_sum := right_sum + index
- 如果 num 非零,則
- 對於 nums 中的每個索引和值 num,執行以下操作:
- 將 (left_sum + right_sum) 插入到 result 的末尾
- 如果 num 非零,則
- right_count := right_count - 1
- left_count := left_count + 1
- left_sum := left_sum + left_count
- right_sum := right_sum - right_count
- 返回 result
示例
讓我們看看以下實現以獲得更好的理解:
def solve(nums): if not nums: return [] left_count = right_count = 0 left_sum = right_sum = 0 result = [] for index, num in enumerate(nums): if num: right_count += 1 right_sum += index for index, num in enumerate(nums): result.append(left_sum + right_sum) if num: right_count -= 1 left_count += 1 left_sum += left_count right_sum -= right_count return result nums = [1, 1, 0, 1] print(solve(nums))
輸入
[1, 1, 0, 1]
輸出
[4, 3, 4, 5]
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP