给定一个长度为 n 的整数数组 arr ,它表示在 范围内的整数的排列。

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

将数组分成2块或者更多块,都无法得到所需的结果。

本题考察的是简单模拟能力,或者说是简单的对“循环不变量”的设计。

我们从前往后处理所有的 (即 i 定义为当前划分块的右边界下标),处理过程中定义变量 j 为当前划分块的左边界下标(初始值为 ),定义 min 为当前划分块中元素最小值(初始值为 或 ),定义 max 为当前划分块中元素最大值(初始值为 或 )。

当且仅当 且 时,下标范围 排序结果为 ,此时块的个数加一,并重新初始化几个变量,继续循环统计下个块的信息。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

更多更全更热门的“笔试/面试”相关资料可访问排版精美的 合集新基地 🎉🎉