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

技术需求:统计数组中两个零之间包含负数的子集数量

数组子集统计:海平面下坡次数统计

问题背景

这个需求类比成「海平面上下坡统计」确实很直观,咱们先把需求拆解清楚:你需要统计数组中位于两个0之间且包含负数的子集数量,其中0代表海平面,正数序列对应上坡、负数序列对应下坡,每次行程必须从海平面出发,回到海平面后才能开启下一次。

明确规则

  • 元素定义:0 = 海平面,正数 = 上坡步数,负数 = 下坡步数
  • 子集划分:每个子集以0开头,到下一个0结束(包含开头的0和两个0之间的所有元素),每个子集对应一次完整的上坡/下坡行程
  • 统计目标:仅计数包含负数的子集(即下坡行程)的数量

核心实现思路

  1. 遍历数组,跟踪当前是否处于一个有效子段(已遇到开头的0,还未遇到结尾的0)
  2. 在子段内记录是否出现过负数
  3. 每当遇到结尾的0时,检查当前子段是否包含负数,若是则计数加1,随后重置子段状态

代码示例(Python)

def count_downhill_subsets(arr):
    downhill_count = 0
    in_segment = False
    has_negative = False

    for num in arr:
        if num == 0:
            if in_segment:
                # 结束当前子段,判断是否为下坡行程
                if has_negative:
                    downhill_count += 1
                # 重置子段状态
                has_negative = False
            # 开启新的子段
            in_segment = True
        else:
            if in_segment:
                # 子段内检测负数
                if num < 0:
                    has_negative = True
    return downhill_count

代码逻辑解释

  • in_segment:标记是否处于一个有效的子段(从遇到第一个0开始,到下一个0结束)
  • has_negative:记录当前子段是否出现过负数
  • 遍历过程中:
    • 遇到0时,如果已经在子段内,就结束当前子段并判断是否计数;同时开启新的子段
    • 遇到非0元素时,如果处于子段内,检查是否为负数并更新标记

示例验证

示例1

输入:a = [0,1,0,-1,-2,-1,0]

  • 分割出的子段:[0,1,0]、[0,-1,-2,-1,0]
  • 第一个子段无负数,第二个子段包含负数,最终输出1,符合预期

示例2

输入:b = [0,1,2,1,0,-1,-2,-1,0,1,2,1,0,-1,0]

  • 分割出的子段:[0,1,2,1,0]、[0,-1,-2,-1,0]、[0,1,2,1,0]、[0,-1,0]
  • 符合条件的是后两个子段,最终输出2,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:47:47