Python程式:找出需要從兩端刪除的最小數量,以使列表平衡
假設我們有一個包含0和1的列表,我們必須從列表的前端或後端刪除值。最後,我們必須找到所需的最小刪除次數,以便剩餘列表中0和1的數量相等。
因此,如果輸入類似於nums = [1, 1, 1, 0, 0, 1],則輸出將為2,因為我們可以刪除第一個1和最後一個1,這樣就有兩個1和兩個0。
為了解決這個問題,我們將遵循以下步驟:
- longest := 0
- d := 一個對映,其中鍵0的值為-1
- currSum := 0
- 對於範圍從0到nums大小的i,執行:
- 如果nums[i]等於0,則
- currSum := currSum - 1
- 否則,
- currSum := currSum + 1
- 如果d中包含currSum,則
- longest := longest和i - d[currSum]中的最大值
- 否則,
- d[currSum] := i
- 如果nums[i]等於0,則
- 返回nums的大小 - longest
讓我們看看下面的實現,以便更好地理解:
示例
class Solution: def solve(self, nums): longest = 0 d = {0 : -1} currSum = 0 for i in range(len(nums)): if nums[i] == 0: currSum -= 1 else: currSum += 1 if currSum in d: longest = max(longest, i - d[currSum]) else: d[currSum] = i return len(nums) - longest ob = Solution() nums = [1, 1, 1, 0, 0, 1] print(ob.solve(nums))
輸入
[1, 1, 1, 0, 0, 1]
輸出
2
廣告