1 条题解
-
0
重量区间
算法思路
设前缀和 ,。
区间 的重量为 ,等价于 ,整理得
因此,从左到右枚举右端点 ,只需统计此前有多少个前缀和等于 。
使用哈希表 记录已经出现的前缀和 的次数。初始令 ,表示空前缀。
每读入一个元素并更新当前前缀和 ,先将 加入答案,再将 增加 。
必须先查询再更新,避免在 时统计空区间。前缀和、 和答案统一使用 64 位整数。
正确性证明
处理右端点 时,哈希表恰好记录 的出现次数。
每个满足 的下标 ,都唯一对应一个重量为 的非空区间 。因此, 正好是以 为右端点的合法区间数量。
枚举所有右端点后,每个合法区间恰好被统计一次,所以算法正确。
复杂度分析
每个元素进行常数次哈希表操作,期望时间复杂度为 。
哈希表最多记录 个不同的前缀和,空间复杂度为 。
- 1
信息
- ID
- 721
- 时间
- 1000ms
- 内存
- 256MiB
- 题目 Rating
- 标签
- 递交数
- 47
- 已通过
- 22
- 上传者