leetcode 769 Max Chunks To Make Sorted

题目:

给一个 arr数组,为[0, 1, ..., arr.length - 1]的一个排列,我们把arr数组分成很多chunks,使得每一个chunk内部排序后,合起所有的chunk,能得到一个整的排好序的数组。请问我们最多能分成多少个chunks?

分析:

很自然地想到,每个chunk所有的数字都要比右边的chunk数字小。而且题目中有个条件一定要用上:arr数组是0~n的排列。也就是说,如果从小到大排,第i个数应该在第i个位置上。如果前i个数中最大的那个数正好在第i个位置上,那么在第i个位置之前的数字可以成为一个chunk。

代码:

    public int maxChunksToSorted(int[] arr) {
            int ans = 0;
            for(int i = 0,maxn = 0;i <arr.length;i++){
                maxn = max(arr[i],maxn);
                if(maxn == i) ans++;
            }
            return ans;
    }

时间复杂度:O(N)

空间复杂度:O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值