915. 分割数组

111 阅读1分钟

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;
    }
};