【LeetCode刷題】769. 最多能完成排序的塊
阿新 • • 發佈:2020-08-10
題目:陣列arr是[0, 1, ..., arr.length - 1]的一種排列,我們將這個陣列分割成幾個“塊”,並將這些塊分別進行排序。之後再連線起來,使得連線的結果和按升序排序後的原陣列相同。
我們最多能將陣列分成多少塊?
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/max-chunks-to-make-sorted
示例 1:
輸入: arr = [4,3,2,1,0]
輸出: 1
解釋:
將陣列分成2塊或者更多塊,都無法得到所需的結果。
例如,分成 [4, 3], [2, 1, 0] 的結果是 [3, 4, 0, 1, 2],這不是有序的陣列。
輸入: arr = [1,0,2,3,4]
輸出: 4
解釋:
我們可以把它分成兩塊,例如 [1, 0], [2, 3, 4]。
然而,分成 [1, 0], [2], [3], [4] 可以得到最多的塊數。
解法思路:有題可知:陣列arr是[0,1,...,arr.length-1]的一種排列,也就是裡面必須的由0---arr..length-1的亂序陣列..如arr.length=6,那麼陣列的內容為:[0,1,2,3,4,5]且是亂序(或順序),所以我們只需要找到最大的值,且當前最大的數的下標i=maxNum(當前最大的數)即可+1
public class Solution { publicint MaxChunksToSorted(int[] arr) { int maxNum = 0, resultNum = 0; for(int i = 0;i<arr.Length;i++) { maxNum = Math.Max(maxNum,arr[i]); if(maxNum == i) resultNum++; } return resultNum; } }