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在这里插入图片描述

解析参见这里

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cmd cd到d盘切换不过去_cmd删除盘符

    cmd cd到d盘切换不过去_cmd删除盘符今天使用dos命令行切换盘符突然发现无法切换(Win7系统)。瞬间感觉就不好了。解决办法:1直接用命令:e:即可2命令:cd/de:可是cde:命令是干什么用的呢?是用来切换e盘的工作目录的.(你cdf:,就是切换f盘的工作目录)如果我们输入cde:之后将盘符切换到E盘,运行截图为(好像效果不明显):如

    2022年9月27日
    6
  • linux上查看jdk环境变量,linux 怎么查看jdk的环境变量

    linux上查看jdk环境变量,linux 怎么查看jdk的环境变量1.查看系统中是否有JDK及其版本:java-version2.查看具体的信息:rpm-qa|grepgcj3.根据Java具体信息卸载JDK:rpm-e–nodepsjava-1.5.0-gcj-1.5.0.0-29.1.el6.x86_644.把下载的JDK包(rpm)上传到Linux系统中,进入对应的目录下执行:rpm-ivhjdk-7u79-linux-x64.rpm…

    2022年9月27日
    4
  • 树莓派4B系统搭建(超详细版)

    树莓派4B系统搭建(超详细版)初次使用树莓派,由于没有显示屏,配置搞了好久,然后写了这篇博客,记录一下自己的心酸史。内容有树莓派烧录,远程桌面搭建,换源。绝对的详细版教程。

    2022年6月11日
    68
  • 什么是倒排索引?

    什么是倒排索引?不多说,直接上干货!欢迎大家,关注微信扫码并加入我的4个微信公众号:大数据躺过的坑Java从入门到架构师人工智能躺过的坑Java全栈大联盟每天都有大量的学习视频资料和精彩技术文章推送…

    2022年7月3日
    20
  • python转置矩阵代码_python 矩阵转置[通俗易懂]

    python转置矩阵代码_python 矩阵转置[通俗易懂]用python怎么实现矩阵的转置只能用循环自己写算法吗自带函数有可以算的吗或者网上的算法可以用的python矩阵转置怎么做?5.矩阵转置给定:L=[[1,2,3],[4,5,6]]用zip函数和列表推导式实现行列转deftranspose(L):T=[list(tpl)fortplinzip(*L)]returnTpython字符串如何变成矩阵进行矩阵转置如输入一串“…

    2022年5月5日
    60
  • 简述交换机vlan配置步骤_华为交换机loopback配置

    简述交换机vlan配置步骤_华为交换机loopback配置交换机VLAN配置基础及实例有关VLAN的技术标准IEEE802.1Q早在1999年6月份就由IEEE委员正式颁布实施了,而且最早的VLNA技术早在1996年Cisco(思科)公司就提出了。随着几年来的发展,VLAN技术得到广泛的支持,在大大小小的企业网络中广泛应用,成为当前最为热门的一种以太局域网技术。本篇就要为大家介绍交换机的一个最常见技术应用–VLAN…

    2022年9月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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