用 Python 编写程序,找出使列表平衡所需的从两端删除的最少数量
pythonserver side programmingprogramming更新于 2026/2/1 18:52:17
假设我们有一个包含 0 和 1 的列表,我们必须从列表的前面或后面删除值。最后,我们必须找到所需的最小删除次数,以使剩余列表中的 0 和 1 数量相等。
因此,如果输入为 nums = [1, 1, 1, 0, 0, 1],则输出将为 2,因为我们可以删除第一个 1 和最后一个 1,这样就有两个 1 和两个 0。
要解决这个问题,我们将遵循以下步骤 −
- longest := 0
- d := 一个映射,其中键 0 的值是 -1
- currSum := 0
- 对于 i,范围从 0 到 nums 的大小,执行
- 如果 nums[i] 与 0 相同,则
- currSum := currSum - 1
- 否则,
- currSum := currSum + 1
- 如果 currSum 在 d 中,则
- 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

