LeetCode每日一题- day19
新手入坑LeetCode,每天打卡一道题
算法不一定很好,只是我自己的一个水平体现,做个自己刷题的记录,欢迎交流学习
(尽量AC LeetCode官方的每日一题)
欢迎交流学习!
题目:769. 最多能完成排序的块
给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。
我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后的原数组相同。
返回数组能分成的最多块数量。
思路:
注意题目细节: 长度为n
,范围是[0,n - 1]
,也就表示是[0,n - 1]
范围内的所有整数,如果是满足题目中分块的条件是下标i == arr[i]
代码:
Java版
class Solution {
public int maxChunksToSorted(int[] arr) {
int ans = 0, max = 0;
for(int i = 0; i < arr.length; i ++){
max = Math.max(max,arr[i]);
if(max == i) ans ++;
}
return ans ;
}
}
C++版
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
int n = arr.size();
int ans = 0, maxN = 0;
for(int i = 0; i < n; i ++){
maxN = max(maxN,arr[i]);
if(maxN == i) ans ++;
}
return ans ;
}
};