8.19 - hard - 66

327. Count of Range Sum

中午请人吃饭,结果吃多了,好困,有点坐不动了。这题有segment tree其实不是那么好做,答案的解释一大堆,决定放到明天去理解。今天的任务是做到hard70,大概是可以完成的。

class Solution(object):
    def merge(self, arr1, arr2):
        r, i, j = [], 0, 0
        while i < len(arr1) and j < len(arr2):
            if arr1[i] < arr2[j]:
                r.append(arr1[i])
                i += 1
            else:
                r.append(arr2[j])
                j += 1
        r += arr1[i:] + arr2[j:]
        return r

    def count(self, prefix, start, end, lower, upper):
        if start >= end:
            return 0

        mid = start + (end - start + 1 >> 1)
        count = sum([
            self.count(prefix, s, e, lower, upper)
            for s, e in ((start, mid - 1), (mid, end))
        ])

        l, r = mid, mid
        for i in xrange(start, mid):
            while l <= end and prefix[l] - prefix[i] < lower:
                l += 1
            while r <= end and prefix[r] - prefix[i] <= upper:
                r += 1
            count += r - l

        prefix[start:end + 1] = self.merge(
            prefix[start:mid], prefix[mid:end + 1])

        return count

    def countRangeSum(self, nums, lower, upper):
        n = len(nums)

        prefix = [0] * (n + 1)
        for i, v in enumerate(nums, 1):
            prefix[i] = prefix[i - 1] + v

        return self.count(prefix, 0, n, lower, upper)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • what: 捧丝儿,挖掘演义明星,对接寻找明星的需求。 如果把艺人视作商品,那就类似于taobao。C2C 如果把...
    更上一层楼_再上一层楼阅读 3,258评论 0 0
  • (1)this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变...
    西兰花伟大炮阅读 3,599评论 0 0
  • 如果说娱乐圈里最容易因戏生情的,宋慧乔应该是算一个了吧。不鸣则已,一鸣惊人,前段时间双宋CP直接跳过暧昧、恋爱等直...
    zubay阅读 3,892评论 0 0
  • 公司:杭州简品食品股份有限公司 地址:杭州下沙经济开发区益丰路55号 队名:反省 队呼:要每天反省 组员: 黄晓明...
    虚怀若江弟子阅读 1,252评论 0 0

友情链接更多精彩内容