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

C++實現(xiàn)LeetCode(769.可排序的最大塊數(shù))

 更新時間:2021年07月12日 15:30:47   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(769.可排序的最大塊數(shù)),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 769.Max Chunks To Make Sorted 可排序的最大塊數(shù)

Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into some number of "chunks" (partitions), and individually sort each chunk.  After concatenating them, the result equals the sorted array.

What is the most number of chunks we could have made?

Example 1:

Input: arr = [4,3,2,1,0]
Output: 1
Explanation:
Splitting into two or more chunks will not return the required result.
For example, splitting into [4, 3], [2, 1, 0] will result in [3, 4, 0, 1, 2], which isn't sorted.

Example 2:

Input: arr = [1,0,2,3,4]
Output: 4
Explanation:
We can split into two chunks, such as [1, 0], [2, 3, 4].
However, splitting into [1, 0], [2], [3], [4] is the highest number of chunks possible.

Note:

  • arr will have length in range [1, 10].
  • arr[i] will be a permutation of [0, 1, ..., arr.length - 1].

這道題給了我們一個長度為n的數(shù)組,里面的數(shù)字是[0, n-1]范圍內(nèi)的所有數(shù)字,無序的?,F(xiàn)在讓我們分成若干塊兒,然后給每一小塊兒分別排序,再組合到一起,使原數(shù)組變得有序,問我們最多能分多少塊,題目中的兩個例子很好的解釋了題意。我們首先來分析例子1,這是一個倒序的數(shù)組,第一個數(shù)字是最大的,為4,那么我們想,這個數(shù)字4原本是應(yīng)該位于數(shù)組的最后一個位置,所以中間不可能斷開成新的塊了,要不然數(shù)字4就沒法跑到末尾去了。分析到這里,我們應(yīng)該隱約有點感覺了,當(dāng)前數(shù)字所在的塊至少要到達坐標為當(dāng)前數(shù)字大小的地方,比如數(shù)字4所在的塊至少要包括i=4的那個位置。那么帶著這個發(fā)現(xiàn),來分析例子2。第一個數(shù)字是1,那么當(dāng)前數(shù)字1所在的塊至少要到 i=1 的位置,然后我們?nèi)?i=1 的位置上看,發(fā)現(xiàn)是數(shù)字0,并沒有超過 i=1 的范圍,那么前兩個數(shù)就可以斷開成一個新的塊兒。再往后看,i=2 的位置是2,可以單獨斷開,后面的3和4也可以分別斷開。所以其實這道題跟Jump Game II那題很像,我們需要維護一個最遠能到達的位置,這里的每個數(shù)字相當(dāng)于那道題中的跳力,只有當(dāng)我們剛好到達最遠點的時候,就可以把之前斷成一個新的塊兒了。

我們遍歷原數(shù)組,用cur表示能到達的最遠點,然后我們遍歷當(dāng)前位置到cur之間的所有點,遍歷的同時如果遇到更大的數(shù)字就更新cur,當(dāng)cur大于等于末尾數(shù)字的時候,此時不能再拆分新塊兒了,返回結(jié)果res加1。否則的話說明到達了最遠點,更新第一個for循環(huán)的變量i,并且結(jié)果res自增1。來看個例子:

[2 0 1 4 3]

當(dāng) i=0 時,cur=2,j=1,然后我們發(fā)現(xiàn) j=1 和 j=2 的數(shù)字都不會更新cur,且cur也沒有大于等于3,所以此時 j=3 的時候退出了內(nèi)部的for循環(huán),i賦值為2,結(jié)果res為1。然后此時 i=3,cur=4,4已經(jīng)大于末尾的3了,直接返回res加1,即2,參見代碼如下:

解法一:

class Solution {
public:
    int maxChunksToSorted(vector<int>& arr) {
        int res = 0, n = arr.size();
        for (int i = 0; i < n; ++i) {
            int cur = arr[i], j = i + 1;
            for (; j <= cur; ++j) {
                cur = max(cur, arr[j]);
                if (cur >= arr.back()) return res + 1;
            }
            i = j - 1;
            ++res;
        }
        return res;
    }
};

其實這道題有更霸道的解法,我們仔細觀察一些例子,可以發(fā)現(xiàn)斷開為新塊兒的地方都是當(dāng)之前出現(xiàn)的最大值正好和當(dāng)前位置坐標相等的地方,比如例子2中,當(dāng) i=1 時,之前最大的數(shù)字是1,所以可以斷開。而在例子1中,當(dāng) i=4 時,才和之前出現(xiàn)過的最大數(shù)字4相等,此時斷開也沒啥意義了,因為后面已經(jīng)沒有數(shù)字了,所以還只是一個塊兒,參見代碼如下: 

解法二:

class Solution {
public:
    int maxChunksToSorted(vector<int>& arr) {
        int res = 0, n = arr.size(), mx = 0;
        for (int i = 0; i < n; ++i) {
            mx = max(mx, arr[i]);
            if (mx == i) ++res;
        }
        return res;
    }
};

到此這篇關(guān)于C++實現(xiàn)LeetCode(769.可排序的最大塊數(shù))的文章就介紹到這了,更多相關(guān)C++實現(xiàn)可排序的最大塊數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實現(xiàn)三子棋游戲

    C語言實現(xiàn)三子棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)三子棋游戲的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳解C語言中不同類型的數(shù)據(jù)轉(zhuǎn)換規(guī)則

    詳解C語言中不同類型的數(shù)據(jù)轉(zhuǎn)換規(guī)則

    這篇文章給大家講解不同類型數(shù)據(jù)間的混合運算與類型轉(zhuǎn)換,有自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換,針對每種轉(zhuǎn)換方法小編給大家介紹的非常詳細,需要的朋友參考下吧
    2021-07-07
  • win10+VS2017+Cuda10.0環(huán)境配置詳解

    win10+VS2017+Cuda10.0環(huán)境配置詳解

    這篇文章主要介紹了win10+VS2017+Cuda10.0環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • VC++6.0實現(xiàn)直線掃描轉(zhuǎn)換的圖文教程

    VC++6.0實現(xiàn)直線掃描轉(zhuǎn)換的圖文教程

    這篇文章主要給大家介紹了關(guān)于VC++6.0實現(xiàn)直線掃描轉(zhuǎn)換的相關(guān)資料,文中通過圖文將實現(xiàn)的步驟一步步介紹的非常詳細,對大家學(xué)習(xí)或者使用VC++6.0具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-01-01
  • C語言實現(xiàn)教務(wù)管理系統(tǒng)

    C語言實現(xiàn)教務(wù)管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)教務(wù)管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言 運算符詳細介紹及示例代碼

    C語言 運算符詳細介紹及示例代碼

    本文介紹C語言 運算符,這里整理了運算符的基礎(chǔ)知識,并附示例代碼,希望能幫助剛剛開始學(xué)習(xí) C語言的同學(xué)
    2016-08-08
  • C語言 存儲類詳解及示例代碼

    C語言 存儲類詳解及示例代碼

    本篇文章主要介紹C語言 存儲類,這里幫大家整理了存儲類的基礎(chǔ)資料,并提供示例代碼和詳細介紹,有興趣的小伙伴可以參考下
    2016-08-08
  • c++ String去除頭尾空格的方法

    c++ String去除頭尾空格的方法

    這篇文章主要介紹了c++ String去除頭尾空格的方法,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • c語言如何實現(xiàn)兩數(shù)之和

    c語言如何實現(xiàn)兩數(shù)之和

    這篇文章主要介紹了c語言如何實現(xiàn)兩數(shù)之和,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++?多態(tài)虛函數(shù)的底層原理深入理解

    C++?多態(tài)虛函數(shù)的底層原理深入理解

    這篇文章主要介紹了C++?多態(tài)虛函數(shù)的底層原理深入理解,多態(tài)是在不同繼承關(guān)系的類對象,去調(diào)用同一函數(shù),產(chǎn)生了不同的行為,通常是父類調(diào)用子類的重寫函數(shù),在C++中就是?父類指針指向子類對象,此時父類指針的向下引用就可以實現(xiàn)多態(tài)
    2022-08-08

最新評論

江川县| 海兴县| 宝鸡市| 江达县| 莆田市| 浪卡子县| 宁蒗| 闽清县| 米易县| 富蕴县| 石楼县| 邵武市| 保靖县| 措美县| 富川| 荆门市| 崇明县| 微山县| 朔州市| 吉林省| 苏尼特左旗| 东丽区| 尼勒克县| 密云县| 玉屏| 栾城县| 堆龙德庆县| 靖州| 苗栗市| 聂荣县| 乐昌市| 泌阳县| 武义县| 大安市| 甘德县| 扶沟县| 杭州市| 花莲县| 信宜市| 吉林省| 晋宁县|