分割数组
Last updated
Last updated
问题简述
思路1
记 lmax[i]
表示 nums[:i]
中的最大值,rmin[i]
表示 nums[i:]
中的最小值;
返回使 lmax[i - 1] <= rmin[i]
的最小 i
;
这里要
<=
,否则意味着所有相同的最小值会被分到 left,不符合题意;
优化:计算 lmax
和比较的过程都是顺序遍历,可以合并到一起,节省部分空间;
思路2
时间复杂度
O(n)
,空间复杂度O(1)
使用 lmax
记录已划分 left 中的最大值;
根据题意,left 的中至少会存在一个元素,因此可以初始化 lmax=nums[0]
;
使用 amax
记录遍历过程中的最大值;
当 nums[i] < lmax
时,说明需要扩充 left,即需要把 i
之前的所有元素都添加到 left;同时更新 lmax=amax
;