nums
,返回区间和在
[lower, upper]
之间的个数,包含
lower
和
upper
。
区间和
S(i, j)
表示在
nums
中,位置从
i
到
j
的元素之和,包含
i
和
j
(
i
≤
j
)。
说明:
最直观的算法复杂度是 O(n2) ,请在此基础上优化你的算法。
示例:
输入: nums =[-2,5,-1]
, lower =-2
, upper =2
, 输出: 3 解释: 3个区间分别是:[0,0]
,[2,2]
,[0,2],
它们表示的和分别为:-2, -1, 2。
Python
import bisect
from typing import List
class Solution:
def countRangeSum(self, nums: List[int], lower: int, upper: int) -> int:
s = [0]
res = cur = 0
for v in nums:
cur += v
res += bisect.bisect_right(s, cur - lower) - bisect.bisect_left(s, cur - upper)
bisect.insort_right(s, cur)
return res