最多能完成排序的块(java)

问题描述:
给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后的原数组相同。返回数组能分成的最多块数量。

样例如下:
在这里插入图片描述
代码及思路如下:

public class MaxChunksToSorted {
    //给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。
    //我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,
    // 使得连接的结果和按升序排序后的原数组相同。
    //返回数组能分成的最多块数量。
    public static int maxChunksToSorted(int[] arr) {
        //思路,记录每一块的最大值,若end指针和这一块的最大值相等,则将分块的个数++
        int st = 0; //开始指针
        int end = 0;//结束指针
        int max = arr[st]; //记录最大值
        int count = 0;
        while (st<=end){
            if (max == end) {
                //说明找到了分界点
                count++;
                st = end+1;
                if (st<arr.length) {
                    end = st;
                    max = arr[end];
                }else break;
                continue;
            }
            end++;
            if (end<arr.length) {
                if (max < arr[end]) {
                    //更新这一块中的最大值
                    max = arr[end];
                }

            }else break;
        }
    return count;
    }
    public static void main(String[] args) {
        int[] arr = {4,3,2,1,0};
        System.out.println(maxChunksToSorted(arr));
        int[] arr1 = {1,0,2,3,4};
        System.out.println(maxChunksToSorted(arr1));

    }
}

结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lianggege88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值