首頁 > 後端開發 > php教程 > 。排序的最大區塊數

。排序的最大區塊數

Patricia Arquette
發布: 2024-12-30 18:03:09
原創
448 人瀏覽過

. Max Chunks To Make Sorted

769。排序的最大區塊

難度:

主題:陣列、堆疊、貪婪、排序、單調堆疊

給定一個長度為 n 的整數數組 arr,它表示 [0, n - 1] 範圍內整數的排列。

我們將 arr 分成一定數量的區塊(即分區),並單獨對每個區塊進行排序。連接它們後,結果應該等於排序後的陣列。

傳回我們可以對陣列進行排序的最大區塊數。

範例1:

  • 輸入: arr = [4,3,2,1,0]
  • 輸出: 1
  • 說明:
    • 分割成兩個或更多區塊將不會傳回所需的結果。
    • 例如,拆分為 [4, 3], [2, 1, 0] 將得到 [3, 4, 0, 1, 2],這是未排序的。

範例2:

  • 輸入: arr = [1,0,2,3,4]
  • 輸出: 4
  • 說明:
    • 我們可以分成兩個區塊,例如 [1, 0], [2, 3, 4]。
    • 但是,分割成 [1, 0], [2], [3], [4] 是可能的最大區塊數。

約束:

  • n == arr.length
  • 1
  • 0
  • arr 的所有元素都是唯一

提示:

  1. 第一個區塊可以作為最小的 k 找到,其中 A[:k 1] == [0, 1, 2, ...k];然後我們重複這個過程。

解:

我們需要找到可以形成的最大區塊數,以便每個區塊都可以單獨排序,並且當連接時,結果是整個陣列的排序版本。

方法:

  1. 關鍵觀察:

    • 陣列是從 0 到 n-1 的整數的排列。這個想法是遍歷數組並找到可以分隔區塊的位置。
    • 如果對於區塊內的所有索引,直到該點的最大元素不超過原始排序數組中該點之後的最小元素,則可以對區塊進行排序。
  2. 策略:

    • 追蹤從左向右遍歷時遇到的最大值。
    • 在每個索引 i 處,檢查 i 之前的最大值是否小於或等於 i。如果這個條件成立,則表示您可以在該索引處拆分數組,因為左側部分可以獨立排序。
  3. 步驟:

    • 迭代數組,同時保持運行最大值。
    • 每當運行最大值等於目前索引時,就可以建立一個區塊。
    • 計算這些區塊的數量。

讓我們用 PHP 實作這個解:769。排序的最大區塊數

<?php
/**
 * @param Integer[] $arr
 * @return Integer
 */
function maxChunksToSorted($arr) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Test cases
$arr1 = [4, 3, 2, 1, 0];
$arr2 = [1, 0, 2, 3, 4];

echo maxChunksToSorted($arr1); // Output: 1
echo "\n";
echo maxChunksToSorted($arr2); // Output: 4
?>
登入後複製

解釋:

  1. 初始化:

    • 我們從 maxSoFar = -1 開始,以確保我們在遍歷數組時正確追蹤數組中的最大值。
    • chunks = 0 記錄可以形成的區塊的數量。
  2. 循環:

    • 我們循環遍歷數組中的每個元素。
    • 對於每個元素,我們將 maxSoFar 更新為目前元素與先前看到的最大值之間的最大值。
    • 如果 maxSoFar == i,則表示索引 i 之前的陣列可以獨立排序,這是一個有效的區塊。
    • 每次此條件成立時,我們都會增加區塊計數。
  3. 回傳:

    • 最後回傳區塊的總數。

時間複雜度:

  • 時間複雜度: O(n),其中 n 是陣列的長度。我們只遍歷數組一次。
  • 空間複雜度: O(1),因為我們只使用幾個變數來儲存中間結果。

演練範例:

對於 arr = [1, 0, 2, 3, 4]:

  • 在索引 0 處,到目前為止遇到的最大值是 1。我們不能在這裡拆分。
  • 在索引1處,最大值為1,與目前索引1匹配,因此我們可以分割成一個區塊。
  • 在索引2處,最大值為2,它與索引2匹配,所以我們再次分裂。
  • 在索引3處,最大值為3,它與索引3匹配,所以我們再次分裂。
  • 在索引4處,最大值為4,它與索引4匹配,所以我們再次分裂。

因此,本例的輸出是 4,因為我們可以將其分成 4 個區塊。

聯絡連結

如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!

如果您想要更多類似的有用內容,請隨時關注我:

  • 領英
  • GitHub

以上是。排序的最大區塊數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板