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

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

因此,如果输入类似于nums = [3,2,6,2,4,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]。

在线示例

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

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

猜你喜欢