给定一个整数数组 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。
通过次数8,041
| 提交次数21,427
代码实现
class Solution:
def countRangeSum(self, nums: List[int], lower: int, upper: int) -> int:
import bisect
t = [0]
for n in nums:
t.append(t[-1]+n)
l = len(t)
re=0
asc = []
for x in t:
i = bisect.bisect_left(asc, x- upper)
j = bisect.bisect(asc, x- lower)
bisect.insort(asc, x)
re += j - i
return re
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-of-range-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。