最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現差分數組的示例詳解

 更新時間:2022年06月09日 10:58:21   作者:Carol  
差分數組是由原數組進化而來,值為原數組當前位置值減去上一個位置的值。本文將通過例題詳解如何利用Java實現差分數組,需要的可以參考一下

前言

昨天(2022-06-07)在做leetcode每日一題的時候,第一次看到了這個超級簡單但是很實用的算法---差分數組,差分數組是由原數組進化而來,值為原數組當前位置值減去上一個位置的值,看下面這個圖片就很清楚了。

從上圖中我們可以很清晰的看到,diffArray[1]=-3=srcArray[1]-srcArray[0]=-1-2,那么當我們在已知差分數組的情況下,如何推出原數組,同樣依據上面的關系,但是我們需要從index=0,依次將當前差分數組與原數組的上一個值進行累加。

應用場景

試想一個場景,我們需要將位置0~8的數值都加上一個相同的數值,如果在原數組上操作,我們需要更改9個位置的值,但是我們在差分數組的位置上操作,我們只需要更改兩個位置的值,即位置0和8分別加上值,我們通過差分數組就能得到位置0~8之間的其他位置的正確值。

這種方式在一次性更新大量數據時候性能提升更加明顯。

Leetcode題目實戰(zhàn)

題目描述

當 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,而因為是開區(qū)間,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差分數組內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中初始化List集合的八種方式匯總

    Java中初始化List集合的八種方式匯總

    List?是?Java?開發(fā)中經常會使用的集合,下面這篇文章主要給大家介紹了關于Java中初始化List集合的八種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • spring mvc 實現獲取后端傳遞的值操作示例

    spring mvc 實現獲取后端傳遞的值操作示例

    這篇文章主要介紹了spring mvc 實現獲取后端傳遞的值操作,結合實例形式詳細分析了spring mvc使用JSTL 方法獲取后端傳遞的值相關操作技巧
    2019-11-11
  • Springboot項目啟動找不到啟動類的解決

    Springboot項目啟動找不到啟動類的解決

    這篇文章主要介紹了Springboot項目啟動找不到啟動類的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 教你幾個?Java?編程中使用技巧

    教你幾個?Java?編程中使用技巧

    枯燥的編程中總得有些樂趣,今天我們不談論那些高深的技能,教你幾個在編程中的奇技淫巧,說不定在某些時候還能炫耀一番呢,今天小編教你幾個?Java?編程中使用技巧,感興趣的朋友參考下吧
    2022-12-12
  • SpringBoot 多線程事務回滾的實現

    SpringBoot 多線程事務回滾的實現

    本文是基于springboot的@Async注解開啟多線程,并通過自定義注解和AOP實現的多線程事務,避免繁瑣的手動提交/回滾事務,感興趣的可以了解一下
    2024-02-02
  • IDEA如何將String類型轉json格式

    IDEA如何將String類型轉json格式

    在Java中,字符串字面量中的轉義字符會被自動轉換,但通過網絡獲取的字符串可能不會自動轉換,為了解決IDEA無法識別JSON字符串的問題,可以在本地對字符串進行一次轉換,替換轉義字符,從而生成可以被IDEA識別的新JSON字符串
    2025-01-01
  • Java并發(fā)J.U.C并發(fā)容器類list set queue

    Java并發(fā)J.U.C并發(fā)容器類list set queue

    這篇文章主要為大家介紹了Java并發(fā),J.U.C并發(fā)容器類list set queue,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • MyBatis中關于SQL的寫法總結

    MyBatis中關于SQL的寫法總結

    這篇文章主要介紹了MyBatis中關于SQL的寫法總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • idea 打包maven項目忽略test文件的操作

    idea 打包maven項目忽略test文件的操作

    這篇文章主要介紹了idea 打包maven項目忽略test文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法

    java并發(fā)編程專題(七)----(JUC)ReadWriteLock的用法

    這篇文章主要介紹了java ReadWriteLock的用法,文中講解非常詳細,示例代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07

最新評論

丽江市| 泗水县| 井研县| 青阳县| 南漳县| 收藏| 顺昌县| 清河县| 昌都县| 福州市| 米易县| 河北省| 阳城县| 镇康县| 怀安县| 安宁市| 枣阳市| 达孜县| 平安县| 阳原县| 即墨市| 德惠市| 邢台县| 西丰县| 汤原县| 甘洛县| 依兰县| 库伦旗| 望谟县| 获嘉县| 儋州市| 化州市| 岑溪市| 灵川县| 宜州市| 山东| 吉安县| 夹江县| 滦南县| 伊金霍洛旗| 广河县|