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

java?LeetCode刷題稍有難度的貪心構(gòu)造算法

 更新時間:2023年02月03日 10:23:13   作者:宮水三葉的刷題日記  
這篇文章主要為大家介紹了java?LeetCode刷題稍有難度的貪心構(gòu)造題解示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

題目描述

這是 LeetCode 上的 768. 最多能完成排序的塊 II ,難度為 困難

Tag : 「貪心」

這個問題和“最多能完成排序的塊”相似,但給定數(shù)組中的元素可以重復(fù),輸入數(shù)組最大長度為 200020002000,其中的元素最大為 10810^8108。

arr 是一個可能包含重復(fù)元素的整數(shù)數(shù)組,我們將這個數(shù)組分割成幾個“塊”,并將這些塊分別進(jìn)行排序。之后再連接起來,使得連接的結(jié)果和按升序排序后的原數(shù)組相同。

我們最多能將數(shù)組分成多少塊?

示例 1:

輸入: arr = [5,4,3,2,1]
輸出: 1
解釋:
將數(shù)組分成2塊或者更多塊,都無法得到所需的結(jié)果。
例如,分成 [5, 4], [3, 2, 1] 的結(jié)果是 [4, 5, 1, 2, 3],這不是有序的數(shù)組。 

示例 2:

輸入: arr = [2,1,3,4,4]
輸出: 4
解釋:
我們可以把它分成兩塊,例如 [2, 1], [3, 4, 4]。
然而,分成 [2, 1], [3], [4], [4] 可以得到最多的塊數(shù)。 

注意:

arr 的長度在 [1,2000][1, 2000][1,2000] 之間。

arr[i] 的大小在 [0,108][0, 10^8][0,108] 之間。

貪心 + 構(gòu)造

一種容易想到的構(gòu)造方法,是與目標(biāo)序列(已排升序的數(shù)組 clone)做區(qū)間比較。

由于題目要求盡可能劃分出多的區(qū)間,我們可以從前往后處理 arrclone 時統(tǒng)計區(qū)間內(nèi)數(shù)的情況,若有 arr[i...j]clone[i...j] 詞頻完全相同,可知 arr[i...j] 可通過內(nèi)部排序調(diào)整為 clone[i...j],此時我們將范圍 [i...j][i...j][i...j] 劃分為一個區(qū)間,然后繼續(xù)往后處理直到整個數(shù)組處理完。

Java 代碼:

class Solution {
    public int maxChunksToSorted(int[] arr) {
        int[] clone = arr.clone();
        Arrays.sort(clone);
        int n = arr.length, ans = 0;
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0, tot = 0; i < n; i++) {
            int a = arr[i], b = clone[i];
            if (map.getOrDefault(a, 0) == -1) tot--;
            else if (map.getOrDefault(a, 0) == 0) tot++;
            map.put(a, map.getOrDefault(a, 0) + 1);
            if (map.getOrDefault(b, 0) == 1) tot--;
            else if (map.getOrDefault(b, 0) == 0) tot++;
            map.put(b, map.getOrDefault(b, 0) - 1);
            if (tot == 0) ans++;
        }
        return ans;
    }
}

TypeScript 代碼:

function maxChunksToSorted(arr: number[]): number {
    let clone = [...arr].sort((a,b)=>a-b)
    let n = arr.length, ans = 0
    const map = new Map<number, number>()
    for (let i = 0, tot = 0; i < n; i++) {
        const a = arr[i], b = clone[i]
        if (!map.has(a)) map.set(a, 0)
        if (map.get(a) == 0) tot++
        else if (map.get(a) == -1) tot--;
        map.set(a, map.get(a) + 1)
        if (!map.has(b)) map.set(b, 0)
        if (map.get(b) == 0) tot++
        else if (map.get(b) == 1) tot--
        map.set(b, map.get(b) - 1)
        if (tot == 0) ans++
    }
    return ans
};
  • 時間復(fù)雜度:O(nlog?n)
  • 空間復(fù)雜度:O(n)

最后

這是我們「刷穿 LeetCode」系列文章的第 No.768 篇,系列開始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道題目,部分是有鎖題,我們將先把所有不帶鎖的題目刷完。

在這個系列文章里面,除了講解解題思路以外,還會盡可能給出最為簡潔的代碼。如果涉及通解還會相應(yīng)的代碼模板。

為了方便各位同學(xué)能夠電腦上進(jìn)行調(diào)試和提交代碼,我建立了相關(guān)的倉庫:github.com/SharingSour… 。

在倉庫地址里,你可以看到系列文章的題解鏈接、系列文章的相應(yīng)代碼、LeetCode 原題鏈接和其他優(yōu)選題解。

以上就是java LeetCode刷題稍有難度的貪心構(gòu)造的詳細(xì)內(nèi)容,更多關(guān)于java LeetCode貪心構(gòu)造的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Kotlin語法學(xué)習(xí)-變量定義、函數(shù)擴(kuò)展、Parcelable序列化等簡單總結(jié)

    Kotlin語法學(xué)習(xí)-變量定義、函數(shù)擴(kuò)展、Parcelable序列化等簡單總結(jié)

    這篇文章主要介紹了Kotlin語法學(xué)習(xí)-變量定義、函數(shù)擴(kuò)展、Parcelable序列化等簡單總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Spring的FactoryBean<Object>接口示例代碼

    Spring的FactoryBean<Object>接口示例代碼

    FactoryBean是Spring框架中的一個接口,用于創(chuàng)建和管理Bean對象,它的作用是將Bean的創(chuàng)建過程交給FactoryBean實現(xiàn)類來完成,而不是直接由Spring容器來創(chuàng)建,本文給大家介紹Spring的FactoryBean<Object>接口,感興趣的朋友一起看看吧
    2023-11-11
  • Java方法簽名的獲取實例代碼

    Java方法簽名的獲取實例代碼

    這篇文章主要介紹了Java方法簽名的獲取實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • java高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))

    java高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))

    下面小編就為大家?guī)硪黄猨ava高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • JFreeChart簡單實現(xiàn)光滑曲線繪制

    JFreeChart簡單實現(xiàn)光滑曲線繪制

    這篇文章主要為大家詳細(xì)介紹了JFreeChart簡單實現(xiàn)光滑曲線的繪制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊問題

    Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊問題

    這篇文章主要介紹了Java并發(fā)系列之JUC中的Lock鎖與synchronized同步代碼塊,簡單介紹了lock鎖及鎖的底層知識,結(jié)合案例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • java多線程Thread的實現(xiàn)方法代碼詳解

    java多線程Thread的實現(xiàn)方法代碼詳解

    這篇文章主要介紹了java多線程Thread的實現(xiàn)方法代碼詳解,涉及start(),run(),stop(),interrupt(),isInterrupted(),join()和join(long millis)等方法的介紹,具有一定借鑒價值,需要的朋友可以了解下。
    2017-11-11
  • Java并發(fā)編程——volatile關(guān)鍵字

    Java并發(fā)編程——volatile關(guān)鍵字

    這篇文章主要介紹了Java并發(fā)編程——volatile關(guān)鍵字的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java并發(fā)編程,感興趣的朋友可以了解下
    2020-10-10
  • Java實現(xiàn)通過時間獲取8位驗證碼

    Java實現(xiàn)通過時間獲取8位驗證碼

    這篇文章主要為大家詳細(xì)介紹了Java如何通過時間獲取8位驗證碼(每兩個小時生成一個),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • SpringBoot整合MongoDB的實現(xiàn)代碼

    SpringBoot整合MongoDB的實現(xiàn)代碼

    自己本科時候一直使用的是Mysql,目前的課題組使用的是MongoDB,因此就花了一部分時間整理了一下,實現(xiàn)springboot與MongoDB的整合,并且實現(xiàn)基本的增刪改查操作,從頭到尾給出一個完整的案例。
    2021-05-05

最新評論

山西省| 陇川县| 长顺县| 漳浦县| 神池县| 建阳市| 盐津县| 林西县| 汪清县| 杨浦区| 富阳市| 绍兴县| 磐安县| 柳林县| 阿尔山市| 洞口县| 孝义市| 任丘市| 巴马| 莒南县| 仁怀市| 许昌县| 峨眉山市| 武威市| 江城| 兰州市| 新宁县| 孙吴县| 庄浪县| 靖安县| 融水| 荣成市| 邵武市| 屏东市| 噶尔县| 潮州市| 综艺| 铜川市| 东乌珠穆沁旗| 康马县| 松阳县|