排序入门 - 选择排序

1.769. 最多能完成排序的块
数组arr是[0, 1, …, arr.length - 1]的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。我们最多能将数组分成多少块?

/*数组arr是[0, 1, ..., arr.length - 1]的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同*/
class Solution {
    
    
    public int maxChunksToSorted(int[] arr) {
    
    
        int count = 0;
        int max = 0;
         //当遍历到第i个位置时,如果可以切分为块,那前i个位置的最大值一定等于i。
        //否则,一定有比i小的数划分到后面的块,那块排序后,一定不满足升序。
        for(int i = 0; i < arr.length; i++){
    
    
            max = Math.max(max, arr[i]);
            if(max == i){
    
    //统计前i个位置的最大元素
                count ++;
            }
        }
        return count;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_52230126/article/details/121687240