假设我们有一个称为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