题目:给定一个无序数组 arr,求出需要排序的最短子数组长度。例如:arr = [1,5,3,4,2,6,7] 返回 4,因为只有 [5,3,4,2] 需要排序。
要求:时间复杂度 O(N)、额外空间复杂度O(1)。
假设数组为 [a b c d e f g h i j k l m n],如果 abc 是有序的,mn是 有序的,至于中间的 defghijkl 是无序的,我们可以得知,如果是正常升序序列,左边的一定是小于右边的任意数值,右边的一定大于左边的任意数值。
分析:
分别从左往右和从右往左遍历,找出左右两边失效的位置,则这两个失效位置中间的数组即为需要排序的最短子数组。
步骤:
1、从左向右遍历,找出不合适数的最右范围:从左往右遍历,