[路飞]leetcode-面试题16.16.部分排序

88 阅读1分钟

给定一个整数数组,编写一个函数,找出索引mn,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的mn(例如整个数组是有序的),请返回[-1,-1]力扣原文

示例:

输入: [1,2,4,7,10,11,7,12,6,7,16,18,19]
输出: [3,9]

解题:

var subSort = function(array) {
  const len=array.length;
  if(len<2)return [-1,-1]
  let n=0,m=len-1,max=array[0],min=array[len-1]
  for (let i = 0; i < len; i++) {
    // debugger
    if(array[i]>=max){
      max=array[i]
    }else{
      n=i
    }

    
  }
  for (let i = len-2; i >=0; i--) {
    // debugger
    if(array[i]<=min){
      min=array[i]
    }else{
      m=i
    }
  }

  return m>=n?[-1,-1]:[m,n]
};