首页 > 其他分享 >LeetCode 769.最多能完成排序的块(中等)

LeetCode 769.最多能完成排序的块(中等)

时间:2022-11-25 13:36:08浏览次数:60  
标签:... arr 769 max 最大值 分割 最多能 数组 LeetCode


题目描述:

数组 ​​arr​​​ 是 ​​[0, 1, ..., arr.length - 1]​​ 的一种排列,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。我们最多能将数组分成多少块?

示例 1:

输入: arr = [4,3,2,1,0]
输出: 1
解释:
将数组分成2块或者更多块,都无法得到所需的结果。
例如,分成 [4, 3], [2, 1, 0] 的结果是 [3, 4, 0, 1, 2],这不是有序的数组。

示例 2:

输入: arr = [1,0,2,3,4]
输出: 4
解释:
我们可以把它分成两块,例如 [1, 0], [2, 3, 4]。
然而,分成 [1, 0], [2], [3], [4] 可以得到最多的块数。

注意:

  • ​arr​​​ 的长度在 ​​[1, 10]​​ 之间。
  • ​arr[i]​​​ 是 ​​[0, 1, ..., arr.length - 1]​​ 的一种排列。

题目分析:

这道题也是一道找规律的题目,特别注意下标值。因为题目给定数组 ​​arr​​​ 是 ​​[0, 1, ..., arr.length - 1]​​​ 的一种排列,所以我们可以从左往右检查局部序列,比如局部序列 ​​[0, 1, ..., n]​​​ ,看看局部序列中最大的数是不是 ​​n​​​ ,如果是就能进行一次分割,否则不能分割。也就是说,当遍历到第 ​​n​​​ 个位置时,如果可以切成块,那满足前 ​​n + 1​​​ 个元素的最大值一定等于 ​​n​​​ 。否则一定有比 ​​n​​ 还要小的数组值被强制划分到后面的块去了,这样排序出来的各个块连起来不满足全部升序。因此,我们可以从左往右遍历数组,获取当前局部序列的最大值,当当前最大值等于下标值时,可以进行一次分割。

题解:

执行用时: 0 ms

内存消耗: 35.5 MB

class Solution {
public int maxChunksToSorted(int[] arr) {
// 定义 分割次数 和 当前最大值
int count = 0, max = 0;
// 遍历整个数组
for (int i = 0; i < arr.length; ++i) {
// 获取当前最大值
max = Math.max(max, arr[i]);
// 如果当前最大值与下标值相等
if (max == i) {
// 分割次数加一
++count;
}
}
// 返回最大分割次数
return count;
}
}

题目来源:力扣(LeetCode)




标签:...,arr,769,max,最大值,分割,最多能,数组,LeetCode
From: https://blog.51cto.com/u_15891283/5886566

相关文章

  • LeetCode 240.搜索二维矩阵II(中等)
    题目描述:编写一个高效的算法来搜索 ​​m x n​​​ 矩阵​​matrix​​​中的一个目标值​​target​​。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的......
  • LeetCode 232.用栈实现队列(简单)
    题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(​​push​​​、​​pop​​​、​​peek​​​、​​empty​​):实现​​MyQueu......
  • LeetCode 448.找到所有数组中消失的数字(简单)
    题目描述:给你一个含​​n​​​个整数的数组​​nums​​​,其中​​nums[i]​​​在区间​​[1,n]​​​内。请你找出所有在​​[1,n]​​​范围内但没有出现......
  • LeetCode 48.旋转图像(中等)
    题目描述:给定一个​​n × n​​​的二维矩阵 ​​matrix​​​表示一个图像。请你将图像顺时针旋转​​90​​度。你必须在原地旋转图像,这意味着你需要直接修改......
  • LeetCode 260.只出现一次的数字III(中等)
    题目描述:给定一个整数数组​​nums​​,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。进阶:你的算法......
  • LeetCode 476.数字的补数(简单)
    题目描述:给你一个正整数​​num​​,输出它的补数。补数是对该数的二进制表示取反。示例1:输入:num=5输出:2解释:5的二进制表示为101(没有前导零位),其补数为010。所以......
  • LeetCode 693.交替位二进制数(简单)
    题目描述:给定一个正整数,检查它的二进制表示是否总是0、1交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。示例1:输入:n=5输出:true解释:5的二进制表示是:101示......
  • LeetCode 268.丢失的数字(简单)
    题目描述:给定一个包含​​[0,n]​​​中​​n​​​个数的数组​​nums​​​,找出​​[0,n]​​这个范围内没有出现在数组中的那个数。进阶:你能否实现线性时间......
  • LeetCode 338.比特位计数(简单)
    题目描述:给你一个整数​​n​​​,对于​​0<=i<=n​​​中的每个​​i​​​,计算其二进制表示中​​1​​​的个数,返回一个长度为​​n+1​​​的数组​......
  • LeetCode 540.有序数组中的单一元素
    LeetCode540.有序数组中的单一元素题目链接:​​https://leetcode-cn.com/problems/single-element-in-a-sorted-array/​​题目描述:给定一个只包含整数的有序数组,每个元......