假设,我们有一个包含多个整数的数组。我们从给定的数字数组中找出所有连续的子数组,并将其放入另一个列表中。现在,我们用该子数组中的最大元素替换每个子数组。还有一个数字 k 给了我们,我们必须找出现在有多少子数组大于给定的数字。
因此,如果输入类似于 input_array = [5, 6, 7, 8], k = 7,那么输出将是 4
来自给定输入数组的连续子数组是:{5}、{6}、{7}、{8}、{5, 6}、{6, 7}、{7, 8}、{5, 6, 7 }, {6, 7, 8}, {5, 6, 7, 8}
如果我们使用其中的最大元素更新子数组,则子数组变为 -
{5}、{6}、{7}、{8}、{6}、{7}、{8}、{7}、{8}、{8}。
元素大于 7 的集合有 4 个。
为了解决这个问题,我们将按照以下步骤操作 -
计数:= 0
连续:= 0
对于 input_array 中的每个 x,执行
连续 := 连续 + 1
计数 := 计数 + 连续
连续:= 0
如果 x > k,则
否则,
返回 input_array 的大小 * ((input_array 的大小 + 1) / 2) 的下限值 - 计数
让我们看看以下实现以获得更好的理解 -
def solve(input_array, k): count = 0 consecutive = 0 for x in input_array: if x > k: consecutive = 0 else: consecutive += 1 count += consecutive return len(input_array) * (len(input_array) + 1) // 2 - 计数 print(solve([5, 6, 7, 8], 7))
[5, 6, 7, 8], 7输出结果
4