每日力扣-最多能完成排序的块

111 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。

题目(已做删减处理)

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

分析

一道模拟题。对于题目中的数组,我们需要的注意是:首先它是0到n的数组,那么就意味着升序排序时,也是从0到n的数据,不存在相同数据占位的问题。从题目中提炼到这个信息的话,其实我们就能够很容易的进行解题:

  1. 遍历数组,对每个数据进行判断;
  2. 如果遍历数组的时候,当前数据是对应的第N个数字,那么就意味着应该切分了。 为了完成以上的逻辑,我们也需要同时有一个临时变量,用来保存最大值。

总结

一道其实十分简单的模拟题。但是说实话,解题花了20分钟左右。因为题目的说明太过于不清楚。以至于我到了力扣官网看了原题说明。

这个也不得不吐槽一下翻译质量问题,真的好几天都是这样让人迷惑了。转到题目上来说。这道题目最让人难以想到,或者是解题的关键,就是0-n的说明,已经能够思考到局部的最大值,就是其对应的位置。

如果你仔细看了题目中的条件,而且有了这个意识,那么题目真的非常简单。我觉得力扣之所以评估这道题目为mid,是因为真的很难思考到我上面说的情况。

解题证明

image.png