[LeetCode] 768. Max Chunks To Make Sorted II 可排序的最大块数 II
This question is the same as "Max Chunks to Make Sorted" except the integers of the given array are not necessarily distinct, the input array could be up to length 2000, and the elements could be up to 10**8.
Given an array arr of integers (not necessarily distinct), we split the array into some number of "chunks" (partitions), and individually sort each chunk. After concatenating them, the result equals the sorted array.
What is the most number of chunks we could have made?
Example 1:
Input: arr = [5,4,3,2,1]
Output: 1
Explanation:
Splitting into two or more chunks will not return the required result.
For example, splitting into [5, 4], [3, 2, 1] will result in [4, 5, 1, 2, 3], which isn't sorted.
Example 2:
Input: arr = [2,1,3,4,4]
Output: 4
Explanation:
We can split into two chunks, such as [2, 1], [3, 4, 4].
However, splitting into [2, 1], [3], [4], [4] is the highest number of chunks possible.
Note:
arrwill have length in range[1, 2000].arr[i]will be an integer in range[0, 10**8].
769. Max Chunks To Make Sorted的拓展,这一题可以有重复的数字。
解法:能形成块儿的数字之和跟排序后的数组的相同长度的子数组的数字之和是相同的。
Algorithm: Iterate through the array, each time all elements to the left are smaller (or equal) to all elements to the right, there is a new chunck.
Use two arrays to store the left max and right min to achieve O(n) time complexity. Space complexity is O(n) too.
This algorithm can be used to solve ver1 too.
Java:
class Solution {
public int maxChunksToSorted(int[] arr) {
int n = arr.length;
int[] maxOfLeft = new int[n];
int[] minOfRight = new int[n];
maxOfLeft[0] = arr[0];
for (int i = 1; i < n; i++) {
maxOfLeft[i] = Math.max(maxOfLeft[i-1], arr[i]);
}
minOfRight[n - 1] = arr[n - 1];
for (int i = n - 2; i >= 0; i--) {
minOfRight[i] = Math.min(minOfRight[i + 1], arr[i]);
}
int res = 0;
for (int i = 0; i < n - 1; i++) {
if (maxOfLeft[i] <= minOfRight[i + 1]) res++;
}
return res + 1;
}
}
Python:
def maxChunksToSorted(self, arr):
res, c1, c2 = 0, collections.Counter(), collections.Counter()
for a, b in zip(arr, sorted(arr)):
c1[a] += 1
c2[b] += 1
res += c1 == c2
return res
C++:
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
int res = 0, sum1 = 0, sum2 = 0;
vector<int> expect = arr;
sort(expect.begin(), expect.end());
for (int i = 0; i < arr.size(); ++i) {
sum1 += arr[i];
sum2 += expect[i];
if (sum1 == sum2) ++res;
}
return res;
}
};
C++:
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
int res = 1, n = arr.size();
vector<int> f = arr, b = arr;
for (int i = 1; i < n; ++i) f[i] = max(arr[i], f[i - 1]);
for (int i = n - 2; i >= 0; --i) b[i] = min(arr[i], b[i + 1]);
for (int i = 0; i < n - 1; ++i) {
if (f[i] <= b[i + 1]) ++res;
}
return res;
}
};
C++:
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
int res = 1, n = arr.size(), curMax = INT_MIN;
vector<int> b = arr;
for (int i = n - 2; i >= 0; --i) b[i] = min(arr[i], b[i + 1]);
for (int i = 0; i < n - 1; ++i) {
curMax = max(curMax, arr[i]);
if (curMax <= b[i + 1]) ++res;
}
return res;
}
};
C++:
class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
stack<int> st;
for (int i = 0; i < arr.size(); ++i) {
if (st.empty() || st.top() <= arr[i]) {
st.push(arr[i]);
} else {
int curMax = st.top(); st.pop();
while (!st.empty() && st.top() > arr[i]) st.pop();
st.push(curMax);
}
}
return st.size();
}
};
类似题目:
[LeetCode] 769. Max Chunks To Make Sorted 可排序的最大块数
All LeetCode Questions List 题目汇总
[LeetCode] 768. Max Chunks To Make Sorted II 可排序的最大块数 II的更多相关文章
- LeetCode - 768. Max Chunks To Make Sorted II
This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...
- [LeetCode] 769. Max Chunks To Make Sorted 可排序的最大块数
Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into som ...
- [leetcode]Weekly Contest 68 (767. Reorganize String&&769. Max Chunks To Make Sorted&&768. Max Chunks To Make Sorted II)
766. Toeplitz Matrix 第一题不说,贼麻瓜,好久没以比赛的状态写题,这个题浪费了快40分钟,我真是...... 767. Reorganize String 就是给你一个字符串,能不 ...
- 【LeetCode】768. Max Chunks To Make Sorted II 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/max-chun ...
- 768. Max Chunks To Make Sorted II
This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...
- LeetCode - 769. Max Chunks To Make Sorted
Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into som ...
- [LeetCode] Max Chunks To Make Sorted II 可排序的最大块数之二
This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...
- [LeetCode] Max Chunks To Make Sorted 可排序的最大块数
Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into som ...
- [Swift]LeetCode768. 最多能完成排序的块 II | Max Chunks To Make Sorted II
This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...
随机推荐
- 云打印 对Echo的Beta产品测试报告
云打印 对Echo的Beta产品测试报告 课程名称:软件工程1916|W(福州大学) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标:作业集合 团队队员 队员学号 队员姓名 个人博 ...
- 磁盘提示“X:拒绝访问”问题解决
cacls "D:\*.*" /T /E /G Administrators:F cacls "D:\*.*" /T /E /G Users:F cacls & ...
- apollo报:系统出错,请重试或联系系统负责人
说明:基于 docker 搭建的 apollo,创建项目后一直报系统出错,请重试或联系系统负责人错误. 项目人员列表一直空白: 经排查是数据库配置参数不匹配,由于自己的虚拟机 ip 为 192.168 ...
- 第六次作业--static关键字、对象
##题目一 ##Computer package Train.Method.TeachDemo.Thread.Fuction; /** * 求n的阶乘算法 * @author 喵 * @date 20 ...
- sql 记录一次灾难 游标问题
起因:游标执行存储过程 下载begin 外面了.. ,造成一直触发存储过程 收获:定义变量统一在游标外部使用, 书写内容在begin 内部书写 alter PROCEDURE USP_dgd_wzh_ ...
- 网络命令——last、lastlog、traceroute、netstat
1.last命令(查看目前和过去用户的登录信息) 2.lastlog命令(检查某用户上次登录的时间): 3.traceroute命令: 显示数据包到主机间的路径. 4.netstat命令: 查看本机已 ...
- 3-开发共享版APP(搭建指南)-修改手机验证码
https://www.cnblogs.com/yangfengwu/p/11273743.html 请先看数据篇 或者参考 https://www.cnblogs.com/yangfengwu/p/ ...
- Harbor高可用
项目需求: 实现Harbor的HTTPS高可用,由于Harbor 服务器配置不高,直接做HTTPS对上传下载镜像时,若docker客户端多时,会非常慢,为了提高harbor的效率,采用以下方式来解决. ...
- DNN的BP算法Python简单实现
BP算法是神经网络的基础,也是最重要的部分.由于误差反向传播的过程中,可能会出现梯度消失或者爆炸,所以需要调整损失函数.在LSTM中,通过sigmoid来实现三个门来解决记忆问题,用tensorflo ...
- python 脚本接受参数
import os import sys print(sys.argv) bogon:Desktop macname$ python3 test2.py deesws.json dede.json s ...