广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现差分数组的示例详解
  • 357
分享到

Java实现差分数组的示例详解

2024-04-02 19:04:59 357人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言应用场景LeetCode题目实战题目描述思路代码前言 昨天(2022-06-07)在做leetcode每日一题的时候,第一次看到了这个超级简单但是很实用的算法---差分数组,

前言

昨天(2022-06-07)在做leetcode每日一题的时候,第一次看到了这个超级简单但是很实用的算法---差分数组,差分数组是由原数组进化而来,值为原数组当前位置值减去上一个位置的值,看下面这个图片就很清楚了。

从上图中我们可以很清晰的看到,diffArray[1]=-3=srcArray[1]-srcArray[0]=-1-2,那么当我们在已知差分数组的情况下,如何推出原数组,同样依据上面的关系,但是我们需要从index=0,依次将当前差分数组与原数组的上一个值进行累加。

应用场景

试想一个场景,我们需要将位置0~8的数值都加上一个相同的数值,如果在原数组上操作,我们需要更改9个位置的值,但是我们在差分数组的位置上操作,我们只需要更改两个位置的值,即位置0和8分别加上值,我们通过差分数组就能得到位置0~8之间的其他位置的正确值。

这种方式在一次性更新大量数据时候性能提升更加明显。

Leetcode题目实战

题目描述

当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订。给你一些日程安排 [start, end) ,请你在每个日程安排添加后,返回一个整数 k ,表示所有先前日程安排会产生的最大 k 次预订。实现一个 MyCalendarthree 类来存放你的日程安排,你可以一直添加新的日程安排。MyCalendarThree() 初始化对象。int book(int start, int end) 返回一个整数 k ,表示日历中存在的 k 次预订的最大值。提示:0 <= start < end <= 10^9每个测试用例,调用 book 函数最多不超过 400次

思路

在上面的题目描述中,如果时间点有重合,这个时间点预定次数+1,最容易想到的就是暴力解法,每个时间点出现就将该时间点预定次数+1,但是看看数据量,最大值10^9,如果只有一个时间段[0-10^9],那我们在时间和空间上都损失了不少。这时候我们就可以使用上面所说的差分数组,仅仅更新开始时间和结束时间,然后进行计算。我们可以使用一个map存储差分数组更改的最终结果(差分数组开始时值全为0),key为开始时间或者结束时间点,value为预定次数,当出现一个日程[start,end),我们需要将start位置预定次数+1,而因为是开区间,end并不包含在此次日程中,相当于在原数组中end-1位置的值+1,但是end位置的值没变,所以差分数组中end位置的值需要-1。接下来看看具体实现代码

代码

TreeMap<Integer, Integer> treeMap;
   public MyCalendarThree() {
       treeMap = new TreeMap<>();
  }
public int book(int start, int end) {
       if (!treeMap.containsKey(start)) {
           treeMap.put(start, 0);
      }
       if (!treeMap.containsKey(end)) {
           treeMap.put(end, 0);
      }
       treeMap.put(start, treeMap.get(start) + 1);
       treeMap.put(end, treeMap.get(end) - 1);
       //x1 - 0 = value1 x2 - x1 = value2
       int answer = 0;
       int max = 0;
       for (Integer value : treeMap.values()) {
           max += value;
           answer = Math.max(max, answer);
      }
       return answer;
  }

到此这篇关于Java实现差分数组的示例详解的文章就介绍到这了,更多相关Java差分数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java实现差分数组的示例详解

本文链接: https://www.lsjlt.com/news/150968.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现差分数组的示例详解
    目录前言应用场景Leetcode题目实战题目描述思路代码前言 昨天(2022-06-07)在做leetcode每日一题的时候,第一次看到了这个超级简单但是很实用的算法---差分数组,...
    99+
    2022-11-13
  • java中浮点数误差的示例分析
    这篇文章将为大家详细讲解有关java中浮点数误差的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、说明浮点数有一个需要特别注意的点就是浮点数是有误差的。因为浮点数存在这个特性,所以我们在编程中要...
    99+
    2023-06-15
  • Java数组实现堆排序的示例分析
    这篇文章主要为大家展示了“Java数组实现堆排序的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java数组实现堆排序的示例分析”这篇文章吧。数组全部入堆,再出堆从后向前插入回数组中,数...
    99+
    2023-05-30
    java
  • Mysql教程分组排名实现示例详解
    目录1.数据源2.数据整体排名1)普通排名2)并列排名3)并列排名3.数据分组后组内排名1)分组普通排名2)分组后并列排名3)分组后并列排名4.分组后取各组的前两名1.数据源 2....
    99+
    2022-11-12
  • Java实现FutureTask的示例详解
    目录前言FutureTask自己实现FutureTask工具准备FutureTask设计与实现总结前言 在并发编程当中我们最常见的需求就是启动一个线程执行一个函数去完成我们的需求,而...
    99+
    2022-11-13
    Java 实现FutureTask Java FutureTask
  • java数组的示例分析
    这篇文章给大家分享的是有关java数组的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java数组1) 声明形式:type[] arrayName; 推荐方式type a...
    99+
    2022-10-19
  • Qt利用QJson实现解析数组的示例详解
    目录前言第一步:进行数据转换第二步:将字符串转成QJsonDocument格式第三步:解析json数据前言 现在有这样一个json结构,需要使用QJson来解析,结构如下: "co...
    99+
    2022-11-13
    Qt QJson解析数组 Qt 解析数组 Qt QJson
  • Java 动态数组的实现示例
    目录静态数组动态数组的实现原理1.添加元素2.删除元素3.数组扩容4.数组缩减静态数组 Java中最基本的数组大家肯定不会陌生: int[] array = new int[6]...
    99+
    2022-11-12
  • Java中数组的示例分析
    小编给大家分享一下Java中数组的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按...
    99+
    2023-06-20
  • 深思 PHP 数组遍历的差异(array_diff 的实现)284435示例
    前两天看到有人要编个考试系统,当时只是简单回了下用随机函数RND   实际一般需要从数据库中随机提取N道题目。   以下代码都基于VBS;   通常的编写类似这样的 '产...
    99+
    2023-05-20
    ASP生成不重复随机数字的另类思路
  • 深思 PHP 数组遍历的差异(array_diff 的实现)284455示例
    前两天看到有人要编个考试系统,当时只是简单回了下用随机函数RND   实际一般需要从数据库中随机提取N道题目。   以下代码都基于VBS;   通常的编写类似这样的 '产...
    99+
    2023-05-20
    ASP生成不重复随机数字的另类思路
  • Java数组实现动态初始化的实例详解
    概念 1、数组动态初始化只给定数组长度,系统默认初始化值。 2、格式 数据类型[] 数组名 = new 数据类型[数组长度]; int[] arr = new int[3];...
    99+
    2022-11-12
  • Java实现跳跃表的示例详解
    跳表全称叫做跳跃表,简称跳表,是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序列表上面增加多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同...
    99+
    2022-11-13
  • Java实现无向图的示例详解
    目录基本概念图的定义无向图的定义无向图的 API无向图的实现方式邻接矩阵边的数组邻接表数组无向图的遍历深度优先搜索广度优先搜索后记基本概念 图的定义 一个图是由点集V={vi}&nb...
    99+
    2022-11-13
  • Java实现整数分解质因数的方法示例
    本文实例讲述了Java实现整数分解质因数的方法。分享给大家供大家参考,具体如下:题目内容:每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x...
    99+
    2023-05-30
    java 整数 质因数
  • Vue.extend实现组件库message组件示例详解
    目录概述Vue.extendmessage 组件配置对象(就是.vue文件)message 生成组件的函数使用方法效果图总结概述 当我们使用组件库的时候,某些组件并不是直接放到模板当...
    99+
    2022-11-13
  • java数组基础的示例分析
    这篇文章主要介绍java数组基础的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数组数组(Array):相同类型数据的集合。Java 数组初始化的两种方法: 静态初始化: 程序员在初始化数组时为数组每个元素赋...
    99+
    2023-05-30
    java 数组
  • Java数组代码的示例分析
    本篇文章给大家分享的是有关Java数组代码的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。数组分类 一维数组1 一维数组的定义和初始化2 对一维数组的操作, 遍历,添加...
    99+
    2023-06-02
  • Java实现并查集示例详解
    目录题目思路find实现join的实现整体代码 题目 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关...
    99+
    2022-11-12
  • java实现Yaml转Json示例详解
    目录缘起调研过程1.0 入口点1.1 基本用法1.2 自定义类型解析1.3 实战1.3.1 从本地读配置文件1.3.2 从配置中心读配置文件缘起 年前,因为项目需要进行配置的优化和...
    99+
    2023-02-13
    java实现Yaml转Json Yaml转Json
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作