目录题目要求思路:模拟Javac++Rust总结题目要求 思路:模拟 Java class Solution { public int maxChunksToSorted
class Solution {
public int maxChunksToSorted(int[] arr) {
int n = arr.length, res = 0;
int min = n, max = -1;
for (int r = 0, l = 0; r < n; r++) {
min = Math.min(min, arr[r]);
max = Math.max(max, arr[r]);
if (l == min && r == max) {
res++;
l = r + 1;
min = n;
}
}
return res;
}
}
手推一遍上面的执行过程发现最小值没有什么意义,可以只用最大值衡量,找一个区间右端点rrr,这个r与arr在[0,r]内的最大值相等;
之所以可以省略最小值的统计,是因为块的大小由最大值决定,小的值都在前面的块里被排序,所以一定能在当前块找到一个与左端点相等的值(最小值);
class Solution {
public int maxChunksToSorted(int[] arr) {
int res = 0, max = -1;
for (int r = 0; r < arr.length; r++) {
max = Math.max(max, arr[r]);
if (r == max)
res++;
}
return res;
}
}
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
int res = 0, maxx = -1;
for (int r = 0; r < arr.size(); r++) {
maxx = max(maxx, arr[r]);
if (r == maxx)
res++;
}
return res;
}
};
impl Solution {
pub fn max_chunks_to_sorted(arr: Vec<i32>) -> i32 {
let (mut res, mut maxx) = (0, -1);
for r in 0..arr.len() {
maxx = maxx.max(arr[r]);
if r as i32 == maxx {
res += 1;
}
}
res
}
}
以上就是Java C++题解LeetCode769最多能完成排序的块的详细内容,更多关于Java C++最多能完成排序的块的资料请关注编程网其它相关文章!
--结束END--
本文标题: Java C++题解leetcode769最多能完成排序的块
本文链接: https://lsjlt.com/news/169355.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0