diff --git "a/2020.11/11.7 - 327. \345\214\272\351\227\264\345\222\214\347\232\204\344\270\252\346\225\260.md" "b/2020.11/11.7 - 327. \345\214\272\351\227\264\345\222\214\347\232\204\344\270\252\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..b550f14eed45de29654e250848679156bc12da86 --- /dev/null +++ "b/2020.11/11.7 - 327. \345\214\272\351\227\264\345\222\214\347\232\204\344\270\252\346\225\260.md" @@ -0,0 +1,38 @@ +给定一个整数数组 `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` + +**代码实现** +```python +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 +著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 +```