首页 > 编程技术 > java

Java C++题解leetcode769最多能完成排序的块

发布时间:2022-10-15 10:38 作者:AnjaVon

题目要求

思路:模拟

Java

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;
    }
}

C++

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;
    }
};

Rust

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++最多能完成排序的块的资料请关注猪先飞其它相关文章!

原文出处:https://juejin.cn/post/7153818509896581133

标签:[!--infotagslink--]

您可能感兴趣的文章: