LeetCode每日一题- day19

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

猜你喜欢

转载自blog.csdn.net/Nmj_World/article/details/127307481