之前看到有个面试题是合并乱序区间,查了下啥是合并乱序区间,然后写代码做了下
var arr = [[1,4],[2,5],[8,10]];
// 合并完为
[[1,5],[8,10]];
分析一下,要合并区间就要拿每一个数组最后的元素去跟下一个的第一个元素做对比
function merge(arg){
let arr = arg, result = [];
arg.sort((a, b) => a[0] - b[0]); // 先根据第一位进性排序
for(let i=0;i<arr.length;i++){
if(result.length){
let res = result[result.length - 1];
if(res[1] > arr[i][0]){
if(res[1] < arr[i][1]){
result[result.length - 1][1] = arr[i][1]; // 如果前一个的第二位大于下一个的第一位,小于第二位,那么被下一个第二位代替
}
}else{
result.push(arr[i])
}
}else{
result.push(arr[i])
}
}
return result
}
参考了下别人的,这个在比较的地方可以简写
if(res[1] > arr[i][0]){
result[result.length - 1][1] = Math.max(res[1],arr[i][1]);
}
Math.max(),返回一组数字中的最大值