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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 二叉树中序遍历(非递归)算法实现–C语言「建议收藏」

    二叉树中序遍历(非递归)算法实现–C语言「建议收藏」今天继续二叉树的学习。昨天写了一遍二叉树的先序遍历(非递归)算法,今天写一下二叉树的二叉树的中序遍历(非递归)算法。中序遍历的非递归算法有两种,但是个人觉得只要掌握一种就可以了,只要自己的逻辑清晰,会哪一种又有什么关系呢~首先给出今天的二叉树的示例图:代码如下://InOrderBiTreeTraverse.cpp:Definestheentrypointforthec…

    2022年9月14日
  • SVN使用 IDEA集成SVN SVN简介 SVN使用详解 SVN学习之路

    SVN使用 IDEA集成SVN SVN简介 SVN使用详解 SVN学习之路文章目录SVN介绍与使用一、SVN引入1.SVM服务器搭建2.需要了解的关键词3.如何让系统共享信息,并且不互相干扰。4.SVN架构二、SVN的操作1.安装tortoisesSvn2.初始化拉去仓库3.提交4.拉取服务器上最新版本5.解决冲突三、Idea集成SVN3.1配置3.2关联服务器仓库SVN介绍与使用一、SVN引入SVN==Subversion它是一个自由/开源的集中式版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据

    2022年10月11日
  • 使用Flash Cookie技术在客户端永久保存HTTP Cookie「建议收藏」

    使用Flash Cookie技术在客户端永久保存HTTP Cookie「建议收藏」前言:在我负责的一个项目中,为了实现一个特殊的需求,要求在客户端的Cookie中长久保存一份数据,但是我们知道在客户端Cookie里保存数据是不稳定的,因为用户可能随时会清除掉浏览器的Cookie,

    2022年7月1日
  • oracle 解锁表

    oracle 解锁表操作的前提用sys用户以SYSDBA角色登录第一种解锁方式1.查询被锁的表selectobject_name,machine,s.sid,s.serial#fromv$locked_objectl,dba_objectso,v$sessionswherel.object_id = o.object_idandl.session_id=s.sid;2.查询…

    2022年6月15日
  • ubuntu 设置不见了_微信莫名其妙的被注销了

    ubuntu 设置不见了_微信莫名其妙的被注销了        今天学习GTK+,所以下载了源码包,然后安装了必要的依赖,装好后,因为默认安装是安装在/usr/local/include/目录下了,为了编程的方便,所以就建立了符号链接到/usr/include/目录下。       一晃就是一天了,现在打开某些程序,发现怎么显示不对,跟我的gentoo安装了gnome时的默认界面一样,很朴素的样子,怎么回事?一看Firefox还好,还没

    2022年9月15日
  • xmind真正有用的几个快捷键(私人总结)

    xmind真正有用的几个快捷键(私人总结)自己总结的常用并且有用的快捷键,不是百度来的,自己一个个地摸索出来的:Ctrl+Shift+L快捷键助手Ctrl+Home返回中心主题Enter插入主题Tab插入子主题F2编辑主题F3添加/编辑标签F4添加/编辑备注F6下钻Shift+F6上钻Delete删除Ctrl+]插入摘要Ctrl+I插入图片Ctrl+Shift+H

    2022年5月27日

发表回复

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

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