Leetcode 差分数组的应用「建议收藏」

Leetcode 差分数组的应用「建议收藏」题目1解法这个题目普通解法参见这里不过这里面的做法都是nlog(n)的。实际上利用差分数组,这道题目可以有O(n)做法这边简单提一下差分序列,对于一个数组,差分序列的定义是数组中前一个值和后一个值的差值形成的新数组。我们在原数组某个区间加上一个统一的值,正常的做法需要在原数组每个位置去叠加,而体现在差分数组上只需要对区间两端的值进行变化即可,差分数组的prefixsum其实就是原数组。比如原数组为:num=[1,1,1,2,2,3]差分数组为:diff_num=[1,0,0,1,0,

大家好,又见面了,我是你们的朋友全栈君。

题目1

在这里插入图片描述

解法

这个题目普通解法参见这里
不过这里面的做法都是nlog(n)的。实际上利用差分数组,这道题目可以有O(n)做法

这边简单提一下差分序列,对于一个数组,差分序列的定义是数组中前一个值和后一个值的差值形成的新数组。我们在原数组某个区间加上一个统一的值,正常的做法需要在原数组每个位置去叠加,而体现在差分数组上只需要对区间两端的值进行变化即可,差分数组的prefix sum其实就是原数组。
比如原数组为:num = [1,1,1,2,2,3]
差分数组为:diff_num = [1,0,0,1,0,1], 假设num[-1] = 0
如果对原数组[0,3)的元素都+1,原数组变为:
num = [2,2,2,2,2,3],
diff_num= [1+1,0,0,1-1,0,1]
可以看到,差分数组的prefix sum与原数组一致,但差分数组只需变化两个值即可
所以差分数组常用在区间叠加的问题上

class Solution:
    def minMeetingRooms(self, intervals: List[List[int]]) -> int:
        if not intervals:
            return 0
        max_time = 0
        for interval in intervals:
            max_time = max(max_time,interval[0],interval[1])
        
        diff_time = [0]*(max_time+2)
        
        for interval in intervals:
            start = interval[0]
            end = interval[1]
            diff_time[start] += 1
            diff_time[end] -= 1
        
        ans = 1
        tmp = 0
        for num in diff_time[:-1]:
            tmp += num
            ans = max(ans,tmp)
        #print(diff_time)
        return ans

题目2在这里插入图片描述

解析参见这里

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136667.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Laravel根据Ip获取国家,城市信息

    Laravel根据Ip获取国家,城市信息

    2021年10月23日
  • anaconda+pycharm的安装与配置教程

    anaconda+pycharm的安装与配置教程注:anaconda是自带Python解释器和Python编辑器于一身的,但是Python编辑器中pycharm更好用,所以本教程是写给自己的,每次重新安装anaconda和pycharm的时候有的要注意的地方都记不住了1.安装anaconda1.1.去官网下载anaconda的安装包(官网:https://www.anaconda.com/products/individual)在官网下载很忙的话可以去这里https://mirrors.tuna.tsinghua.edu.cn/下1.2.安装过

  • wxPython 入门教程.

    wxPython 入门教程.这篇文章是关于wxPython,但wxPython实际是两件事物的组合体:Python脚本语言和GUI功能的wxWindows库(关于wxWindows的介绍,请参阅developerWorks上的[“细述wxWindows”](http://www.ibm.com/developerworks/cn/linux/sdk/python/wxwin/index.html))。wxWindows库是为了最大可移植性的C/C++库,而抽取GUI功能。所以wxWindow

  • elk怎么搭建_搭建网站的过程

    elk怎么搭建_搭建网站的过程1.服务器使用阿里云服务器(方便),抢占式实例(便宜),4核16G,系统选择centos7.4/64位(好用)。购买地址:https://ecs-buy.aliyun.com/我们只是测试学习使用,把端口权限全开就行(不然外网访问不了),安全组配置那里添加如下:2.下载ELK的包:下载地址:https://www.elastic.co/downloads下载最新版的、l…

  • navicat激活码最新【2021最新】

    (navicat激活码最新)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~TR…

  • python简单代码编写_python编码规范

    python简单代码编写_python编码规范本书以Python3.7为编程工具,共分8个单元,从易到难,从基础应用到综合实战,详细讲解Python创意编程的方法和思维。本书通过丰富有趣的实例,帮助学生学习编程思维方式,掌握Python编程基础知识,包括Python环境的搭建、Python的认识、顺序结构、选择结构、循环结构、列表、元组与字典、函数、字符串及算法。本书适合对Python编程感兴趣的初高中学生阅读,也适合作为家长和老师指导中学…

    2022年10月25日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号