程序查找两端需要删除的最少数量,以使列表在Python中保持平衡
假设我们有一个包含0和1的列表,我们必须从列表的前面或后面删除值。最后,我们必须找到所需的最小删除数目,以使其余列表具有相等的0和1。
因此,如果输入类似于nums=[1,1,1,0,0,1],则输出将为2,因为我们可以删除第一个1和最后一个1,以便有两个1和两个0。
为了解决这个问题,我们将遵循以下步骤-
最长:=0
d:=一个映射,其中键0的值为-1
currSum:=0
对于范围从0到nums的i,执行
d[currSum]:=i
最长:=最长和i-d[currSum]的最大值
currSum:=currSum+1
currSum:=currSum-1
如果nums[i]等于0,则
除此以外,
如果currSum在d中,则
除此以外,
返回的数字大小-最长
让我们看下面的实现以更好地理解-
示例
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
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短