915. 分割数组
1.扫2次
class Solution {
public:
int partitionDisjoint(vector<int>& nums) {
int n= nums.size();
if (!n) return 0;
vector<int> mx(n), mn(n);
int mxx, mnn;
mx[0] = mxx = nums[0]; mn[n - 1] = mnn = nums[n - 1];
for (int i = 1; i < n; ++i) mx[i] = mxx = max(mxx, nums[i]);
for (int i = n - 2; i >= 0; --i) mn[i] = mnn = min(mnn, nums[i]);
for (int i = 0; i + 1 < n; ++i) if (mx[i] <= mn[i + 1]) return i + 1;
return n;
}
};
2.扫1次
class Solution {
public:
int partitionDisjoint(vector<int>& nums) {
int lmx = nums[0], mx = nums[0], res = 0;
for (int i = 0, n = nums.size(); i < n - 1; ++i) {
mx = max(mx, nums[i]);
if (nums[i] < lmx) lmx = mx, res = i;
}
return res + 1;
}
};