Max Chunks To Make Sorted

medium arrays prefix-max greedy

Problem

Given a permutation of 0..n-1, partition the array into the maximum number of chunks so that sorting chunks and concatenating gives the sorted array.

Inputarr=[1,0,2,3,4]
Output4
Chunks [1,0], [2], [3], [4] each sort into the right place.

def maxChunksToSorted(arr):
    ans = 0
    mx = 0
    for i, x in enumerate(arr):
        mx = max(mx, x)
        if mx == i:
            ans += 1
    return ans
function maxChunksToSorted(arr) {
  let ans = 0, mx = 0;
  for (let i = 0; i < arr.length; i++) {
    mx = Math.max(mx, arr[i]);
    if (mx === i) ans++;
  }
  return ans;
}
int maxChunksToSorted(int[] arr) {
    int ans = 0, mx = 0;
    for (int i = 0; i < arr.length; i++) {
        mx = Math.max(mx, arr[i]);
        if (mx == i) ans++;
    }
    return ans;
}
int maxChunksToSorted(vector<int>& arr) {
    int ans = 0, mx = 0;
    for (int i = 0; i < (int)arr.size(); i++) {
        mx = max(mx, arr[i]);
        if (mx == i) ans++;
    }
    return ans;
}
Time: O(n) Space: O(1)