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

求平均值≥K的子数组个数:C++数据结构选型困惑求解

问题:求整数数组中平均值大于等于K的子数组个数

约束条件

1 <= N <= 10^5
-10^9 <= A[i] <= 10^9

我的思路

设A[i]为数组前i个元素的前缀和,推导如下:

(A[j] - A[i]) / (j - i) >= K
(A[j] - A[i]) >= K * (j - i)
(A[j] - K * j) >= (A[i] - K * i) <- 记该表达式为e

由表达式e可知,若将当前索引的前缀和减去K*当前索引的值存入哈希表,只需查询其中小于等于表达式e的元素数量。我在处理第i个索引时存入哈希表的是A[i] - K * i(A[i]为数组前缀和)。

但我难以找到能在O(1)或O(logN)时间内查询小于给定元素数量的数据结构。

尝试过的数据结构

  • 线段树:但由于约束条件过高,无法分配足够的最大空间。
  • C++中的multi-set:使用upper_bound(二分查找)获取迭代器,通过计算upper_bound与begin()迭代器的差值得到小于X的元素数量,但该操作最坏时间复杂度为O(N),导致整体时间复杂度变为O(N²)。

注:以上内容基于C语言,我使用C进行解题。希望得到相关思路与建议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:01:20