我花了1个多小时才提交成功,思路很复杂,就不写了,
写一个很受启发的、好的思路
求出每个位置左面和右面的最大最小值,假若到目前位置为止最大值小于等于右面最小值,那么在此位置右侧可以有一个划分,左侧默认为划分左括号,数组右侧默认有一个划分的右括号,我们则只统计右括号即可!!! class Solution { public: int maxChunksToSorted(vector<int>& arr) { int res = 0; vector<int> dp1(arr.size(), 0); vector<int> dp2(arr.size(), 0); if (arr.empty()) return res; dp1[0] = arr[0]; dp2[arr.size()-1] = arr[arr.size()-1]; for (int i=1; i<arr.size(); ++i){ dp1[i] = max(dp1[i-1], arr[i]); dp2[arr.size()-1-i] = min(dp2[arr.size()-i], arr[arr.size()-1-i]); } for (int i = 0; i<arr.size()-1; ++i){ res += (dp1[i] <= dp2[i+1]); } return res+1; } };单调栈的方法没有看明白,以后回头再看!!!。
转载于:https://www.cnblogs.com/ACStrive/p/11614017.html
相关资源:JAVA上百实例源码以及开源项目