Leetcode 768. 最多能完成排序的块 II

题目

这个问题和“最多能完成排序的块”相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8。

arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。

我们最多能将数组分成多少块?

测试样例

示例 1:

输入: arr = [5,4,3,2,1]
输出: 1
解释:
将数组分成2块或者更多块,都无法得到所需的结果。
例如,分成 [5, 4], [3, 2, 1] 的结果是 [4, 5, 1, 2, 3],这不是有序的数组。

示例 2:

输入: arr = [2,1,3,4,4]
输出: 4
解释:
我们可以把它分成两块,例如 [2, 1], [3, 4, 4]。
然而,分成 [2, 1], [3], [4], [4] 可以得到最多的块数。

注意:

  • arr的长度在[1, 2000]之间。
  • arr[i]的大小在[0, 10**8]之间。

题解

贪心
遍历每个元素,只要其左边包括本身的最大值不大于其右边的最小值,我们就可以在这里分段。详细过程见代码

代码

 int maxChunksToSorted(vector<int>& arr) {int n = arr.size();vector<int> lMax(n,INT_MIN),rMin(n,INT_MAX);lMax[0] = arr[0];rMin[n-1] = arr[n-1];for(int i=1; i<n; i++){lMax[i] = max(lMax[i-1],arr[i]);rMin[n-i-1] = min(rMin[n-i],arr[n-i-1]);}int ans = 1;      //起始块为1块for(int i=0; i<n-1; i++){if(lMax[i] <= rMin[i+1])  ans ++;}return ans;}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-chunks-to-make-sorted-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Leetcode 768. 最多能完成排序的块 II C++相关推荐

  1. Java实现 LeetCode 768 最多能完成排序的块 II(左右便利)

    768. 最多能完成排序的块 II 这个问题和"最多能完成排序的块"相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8. arr是一个可能包含 ...

  2. 图解LeetCode——768. 最多能完成排序的块 II(难度:困难)

    一.题目 这个问题和"最多能完成排序的块"相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8. arr是一个可能包含重复元素的整数数组,我们将 ...

  3. 768. 最多能完成排序的块 II 贪心

    768. 最多能完成排序的块 II 这个问题和"最多能完成排序的块"相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8. arr是一个可能包含 ...

  4. 768. 最多能完成排序的块 II

    这个问题和"最多能完成排序的块"相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8. arr是一个可能包含重复元素的整数数组,我们将这个数组分 ...

  5. 常规贪心构造题 最多能完成排序的块 II

    这是 LeetCode 上的  最多能完成排序的块 II ,难度为 困难. Tag : 「贪心」 这个问题和"最多能完成排序的块"相似,但给定数组中的元素可以重复,输入数组最大长度 ...

  6. LeetCode 最多能完成排序的块II

    这个问题和"最多能完成排序的块"相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8. arr是一个可能包含重复元素的整数数组,我们将这个数组分 ...

  7. Java实现 LeetCode 769 最多能完成排序的块(单向遍历)

    769. 最多能完成排序的块 数组arr是[0, 1, -, arr.length - 1]的一种排列,我们将这个数组分割成几个"块",并将这些块分别进行排序.之后再连接起来,使得 ...

  8. LeetCode 769. 最多能完成排序的块

    1. 题目 数组arr是[0, 1, ..., arr.length - 1]的一种排列,我们将这个数组分割成几个"块",并将这些块分别进行排序. 之后再连接起来,使得连接的结果和 ...

  9. Leetcode 769 最多能完成排序的块

    数组arr是[0, 1, ..., arr.length - 1]的一种排列,我们将这个数组分割成几个"块",并将这些块分别进行排序.之后再连接起来,使得连接的结果和按升序排序后的 ...

最新文章

  1. C语言中连续调用rand函数,返回值不变
  2. 单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时
  3. 【Android FFMPEG 开发】OpenSLES 播放音频 ( 创建引擎 | 输出混音设置 | 配置输入输出 | 创建播放器 | 获取播放/队列接口 | 回调函数 | 开始播放 | 激活回调 )
  4. 创智播客微服务_传智播客2018JavaEE IDEA版本
  5. matlab与python交互_Python和MATLAB交互的基本操作
  6. kotlin 中 lambda 表达式的 return 行为
  7. UOJ284 快乐游戏鸡(树上动态规划问题、长链剖分+单调栈)
  8. pycharm-自动换行
  9. 使用sshpass借助scp自动输入密码传输一个文件夹下的全部内容
  10. mac下修改mysql连接数_MySQL最大连接数设置
  11. RUP---统一软件开发过程
  12. 190716每日一句, 勇于尝试,创造属于自己的时机
  13. 【路径规划】基于matlab遗传算法多车辆路径规划【含Matlab源码 704期】
  14. 关于微信小程序的相关接口以及问题
  15. Mysql-connector-java驱动包(最新版下载详细教程)
  16. Riverbed助力富邦人寿在市场竞争和数字化进程中抢占先机
  17. 浏览器如何工作:在现代web浏览器场景的之下
  18. Mysql数据库的分离和附加
  19. nRF52832低功耗蓝牙应用开发之入门教程
  20. WEBERP测试实录:一 webERP安装

热门文章

  1. VMware Tools和open-vm-tools的安装与使用:解决虚拟机不全屏和无法传输文件的问题
  2. Mongodb更新数组$sort操作符
  3. 2023年全国最新食品安全管理员精选真题及答案25
  4. USE启动盘制作linux服务器/桌面系统搭建(Universal USB Installer)
  5. 【数据库】数据库保护
  6. SQL Server - 数据库恢复的时候停在 Restoring 状态
  7. 晶体生长计算机实验报告,晶体制作实验报告范文
  8. 微盟电子商城网络交易系统——Day04【商品服务-品牌管理、商品服务-属性分组】
  9. k8s nodeName与nodeSelector的简单应用
  10. 邮件合并功能:使用Excel批量生成word内容