You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计列表中指定长度k的递增趋势子集数量

统计列表中连续递增k长子集的数量

问题定义

给定一个数值列表和正整数k,统计列表中连续且严格递增的k长度子数组(即连续元素组成的子集)的数量。比如输入[1,2,3,4,5,6]、k=3时,结果为4,对应子数组(1,2,3),(2,3,4),(3,4,5),(4,5,6)。

核心思路

  1. 边界情况优先处理:
    • 如果k大于列表长度,直接返回0(不可能存在符合要求的子集)
    • 如果k=1,每个元素自身都是符合要求的子集,返回列表长度即可
  2. 遍历统计连续递增段:
    • 遍历列表,追踪当前连续递增段的长度
    • 每当遇到不满足递增的元素时,计算当前递增段能贡献的k长子集数量(仅当段长≥k时,贡献值为段长 - k + 1),然后重置当前段长度
    • 遍历结束后,别忘了处理最后一个递增段

代码实现(Python)

def count_increasing_k_subarrays(arr, k):
    arr_len = len(arr)
    # 边界情况
    if k > arr_len or not arr:
        return 0
    if k == 1:
        return arr_len
    
    total = 0
    current_streak = 1
    
    for i in range(1, arr_len):
        if arr[i] > arr[i-1]:
            current_streak += 1
        else:
            if current_streak >= k:
                total += current_streak - k + 1
            current_streak = 1
    # 处理最后一段递增序列
    if current_streak >= k:
        total += current_streak - k + 1
    return total

# 测试示例
test_arr = [1,2,3,4,5,6]
test_k = 3
print(count_increasing_k_subarrays(test_arr, test_k))  # 输出4

额外测试案例

比如输入列表[1,3,2,4,5,7,6]、k=2:

  • 连续递增段为[1,3](长度2)、[2,4,5,7](长度4)、[6](长度1)
  • 贡献值分别为2-2+1=1和4-2+1=3,总计4个符合要求的子数组:(1,3),(2,4),(4,5),(5,7)

内容的提问来源于stack exchange,提问作者Shawnshaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:18:34