给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。
/** * @param {number[]} array * @return {number[]} */ const subSort = (array = [5,3,1,7,9]) => { const len = array.length let start = 0 let end = 0 for(let i = 0; i < len - 1; i++){ const cv = array[i], nv = array[i + 1] if(cv > nv){ start = i break } } for(let i = len - 1; i > 0; i--){ const cv = array[i], nv = array[i - 1] if(cv < nv){ end = i break } } if(start === 0 && end === 0) return [-1, -1] const sliceArray = array.slice(start, end + 1) const min = Math.min(...sliceArray) const max = Math.max(...sliceArray) const res = [] for(let i = 0; i < len - 1; i++){ if(array[i] > min){ res.push(i) break } } for(let i = len - 1; i > - 1; i--){ if(array[i] < max){ res.push(i) break } } return res };
标签:const,len,start,let,array,排序,部分,cv From: https://www.cnblogs.com/zhenjianyu/p/17094255.html