📅  最后修改于: 2023-12-03 15:26:36.366000             🧑  作者: Mango
在处理数组时,通常需要查找某个数字作为子数组的结尾时,后面是否还有符合条件的数字。这时就需要查找以 arr[i] 结尾的子数组的数量,其中 arr[i] 是该子数组的最小元素。
我们可以遍历整个数组,对每个 arr[i],查找以它结尾的符合条件的子数组数量。具体做法是:
以下是采用 Python 语言实现的代码片段:
def count_subarrays(arr):
n = len(arr)
res = [1] * n # 初始化为1,因为每个数本身都是一个子数组
for i in range(n):
j = i - 1
while j >= 0 and arr[j] <= arr[i]:
res[i] += res[j]
j -= 1
return sum(res)
以上代码中,res 数组用于记录以每个元素结尾的子数组数量,初始化为 1。内层循环从 i-1 开始向前遍历,如果 arr[j] 比 arr[i] 小或等于 arr[i],则将以 arr[j] 结尾的子数组数量加到以 arr[i] 结尾的子数组数量中,直到找到一个比 arr[i] 大的数字或遍历到 arr[0]。
本篇介绍了一种查找以 arr[i] 结尾的子数组的数量的算法,通过遍历数组和双重循环实现。这种算法简单易懂,适用于大部分情况。