Max Chunks To Make Sorted数组--力扣101算法题解笔记

11.2Max Chunks To Make Sorted数组

题目描述

给定一个含有0到n的整数数组,每个整数只出现一次,求这个数组最多可以分割成多少个子数组,使得对每个子数组进行增序排列后,原数组也是增序的。

输入输出样例

Input :1, 0, 2, 3, 4

Output:4

最多的分割是1,0,2,3,4

题解

从左往右遍历,同时记录当前的最大值,每当当前最大值等于数组位置时,我们可以做一次分割

如果当前最大值大于数组位置,则说明右边一定有小于数组位置的数字,需要把他也加入待排序的子数组,又因为数组只包含不重复的0到n,所以当前的最大值一定不会小于数组位置。所以当前最大值等于数组位置时,假设是p,我们就可以完成一次分割操作,并且这个数与上一次分割的位置q之间的值一定是q+1到p的所有数字

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

int maxChunksToSorted(vector<int>& arr) {
    int chunks = 0, cur_max = 0;
    for (int i = 0; i < arr.size(); ++i) {
        cur_max = max(cur_max, arr[i]);//找当前数组和最大值中最大的内个进行比较
        if (cur_max == i) {//如果与数组下标相等,那就切
            ++chunks;
        }
    }
    return chunks;
}

int main() {
    vector<int> matrix = { 1, 0, 2, 3, 4 };

    cout << maxChunksToSorted(matrix);

    return 0;
}
相关推荐
毕竟是shy哥2 小时前
计算YOLO数据集中每个类的目标数
算法·yolo·机器学习
M78佐菲2 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
晊晌_h3 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
我找到地球的支点啦4 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
罗西的思考4 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(3)--- RAG
人工智能·算法·机器学习
浪里镖客5 小时前
位姿转换矩阵写法-个人习惯(计算机理解其实是相反的)
线性代数·算法·矩阵
小白羊丨8 小时前
如何诊断 Prompt 模板导致的效果下降?
人工智能·算法·prompt
OPEN-F9 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
lisin-lee-cooper9 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法
sunburn-10 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法