Leetcode 3728. Stable Subarrays With Equal Boundary and Interior Sum
- Leetcode 3728. Stable Subarrays With Equal Boundary and Interior Sum
- 1. 解题思路
- 2. 代码实现
- 题目链接:3728. Stable Subarrays With Equal Boundary and Interior Sum
1. 解题思路
这一题就是一个前序数组的思路。
我们考察第jjj个元素作为右边界时的情况,则其可用的左边界iii必然满足以下条件:
- j−i>=2j-i>=2j−i>=2
- ci=cjc_i = c_jci=cj
- ∑k=0jck−∑k=0ick=2∗cj\sum\limits_{k=0}^{j}c_k - \sum\limits_{k=0}^{i}c_k = 2* c_jk=0∑jck−k=0∑ick=2∗cj
因此,我们以组合数(ci,∑k=0ick)(c_i, \sum\limits_{k=0}^{i}c_k)(ci,k=0∑ick)来进行考察,那么,对于任意位置jjj作为右边界时其可行的构造方式就是在到j−2j-2j−2位置为止,组合数(cj,∑k=0jck−2∗cj)(c_j, \sum\limits_{k=0}^{j}c_k -2*c_j)(cj,k=0∑jck−2∗cj)出现的次数。
2. 代码实现
由此,我们即可给出python代码实现如下:
class Solution:def countStableSubarrays(self, capacity: List[int]) -> int:n = len(capacity)cumsum = list(accumulate(capacity))cnt = defaultdict(int)ans = 0for i in range(2, n):cnt[(capacity[i-2], cumsum[i-2])] += 1ans += cnt[(capacity[i], cumsum[i]-2*capacity[i])]return ans
提交代码评测得到:耗时346ms,占用内存61.48MB。
