classSolution { public: intmaxIncreasingSubarrays(vector<int> &nums){ int n = nums.size(); int i; // n从2开始 int k = n / 2; int a, b; vector<int> inc(n, 1); for (i = 1; i < n; i++) { if (nums[i] > nums[i - 1]) { inc[i] = inc[i - 1] + 1; } }
while (k > 0) { a = 0; b = a + k; while (b + k - 1 < n) { if (inc[a + k - 1] >= k && inc[b + k - 1] >= k) { return k; } else { a++; b = a + k; } } k--; if (k == 1) { return1; } } return1; } };
如果我们知道所有严格递增的两个相邻数据段,那么 k 为这两个段的最小值。我们遍历一遍数组,找到 k 的最大值即可。但要注意,我们还需要记录单个严格递增段的长度,因为它也可以拆成两个严格递增的两个相邻数据段。