LeetCode769. 最多能完成排序的块

本文介绍了一种算法,用于解决将数组分割成多个块,每个块内部排序后整体仍保持升序的问题。通过遍历数组,寻找可以分割的位置,最终得出最大块数量。

769. 最多能完成排序的块

题目描述:给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。

我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后的原数组相同。

返回数组能分成的最多块数量。

要点
  • n == arr.length
  • 1 <= n <= 10
  • 0 <= arr[i] < n
  • arr 中每个元素都 不同
算法思路

因为给定数组是不重复数组,且范围在1-10,所以在从左至右分块时,块的最大值是当前块的索引下标值,因此只要从左至右判断最大值是不是等于下标索引,等于下标索引即分块加1

class Solution:
    def maxChunksToSorted(self, arr: List[int]) -> int:
        res=0
        m=0.0
        for a in range(len(arr)):
            m = max(m, arr[a])#统计前i个位置的最大元素
            if (m == a):#判断最大元素值是否等于下标值
                res=res+1
        return res
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值