Solution1 贪心 + 双指针

  • 时间复杂度 O(n)

  • 空间复杂度 O(1)

把 nums 分成 3 部分:ABC

设我们要找的就是 B,则 A 和 C 都是升序,且

  • A 中任意元素小于 B 中最小元素

  • C 中任意元素大于 B 中最大元素

寻找 B 右边界的方法:

从左往右遍历 nums,用 maxn 来记录当前(遇到 i 之前)的最大值。

  • nums[i] > maxn,说明当前元素可以作为升序序列新的末尾元素。更新 maxn

  • nums[i] <= maxn,说明 [0, i] 区间内的数组不满足升序条件。更新 r 到 i

即让 r 右边的 都大于 maxn

找左边界的方法正好相反,从右往左遍历。

Last updated