在Python中查找删除一个元素后包含最大值和最小值的子列表的数量

在Python中查找删除一个元素后包含最大值和最小值的子列表的数量

假设我们有一个名为nums的数字列表,我们最多可以删除一个元素。我们必须找到包含结果列表的最大值和最小值的子列表的最大数量。

所以,如果输入是nums = [3,2,6,2,4,10],那么输出将是8,因为如果我们删除10,我们将得到[3,2,6,2,4],并且有八个子列表,其中包含最大值和最小值-

  • [2,6]

  • [6,2]

  • [2,6,2]

  • [3,2,6]

  • [6,2,4]

  • [2,6,2,4]

  • [3,2,6,2]

  • [3,2,6,2,4]。

为了解决这个问题,我们将按照以下步骤执行 –

  • 定义函数check()。这将使用lst

  • mn:lst的最小值,mx:lst的最大值

  • min_pos:null,max_pos:null

  • ret:0

  • 对于lst中的每个索引i和值num,请执行以下操作 –

    • 如果num与mn相同,则 –
      • min_pos:= i
    • 如果num与mx相同,则 –
      • max_pos:= i
    • 如果min_pos为null或max_pos为null,则 –
      • 进行下一个迭代
    • ret:= ret +min(min_pos和(max_pos + 1))

  • 返回ret

  • 从主方法中执行以下操作 –

  • 如果nums的大小<= 1,则 –

    • 返回nums的大小
  • ret:=检查(nums)

  • 对于[最小(nums) ,最大(nums)]中的每个rem_cand,执行以下操作(

    • 如果rem_cand的出现次数为1,则 –
      • idx:= nums中rem_cand的索引

      • ret:=max(ret和check(nums [从索引0到idx-1]连接nums [从索引idx + 1到end])

  • 返回ret

示例

让我们看下面的实现以更好地理解 –

class Solution:
    def solve(self, nums):
        if len(nums)<=1:
            return len(nums)
        def check(lst):
            mn,mx = min(lst),max(lst)
            min_pos, max_pos = None,None
            ret = 0
            for i,num in enumerate(lst):
                if num == mn:
                    min_pos = i
                if num == mx:
                    max_pos = i
                if min_pos is None or max_pos is None:
                    continue
                ret += min(min_pos,max_pos)+1
            return ret
        ret = check(nums)
        for rem_cand in [min(nums),max(nums)]:
            if nums.count(rem_cand)==1:
                idx = nums.index(rem_cand)
                ret = max(ret,check(nums[:idx]+nums[idx+1:]))
        return ret

ob = Solution()
nums = [3,2,6,2,4,10]
print(ob.solve(nums))

输入

[3,2,6,2,4,10]

输出

8

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程