写一个merge函数
[
{ start: 1, end: 2 },
{ start: 2, end: 3 },
{ start: 5, end: 6 },
{ start: 3, end: 5 },
{ start: 8, end: 9 },
]
参数是一个数组
如果参数只有{ start: 1, end: 2 },
{ start: 2, end: 3 } 合并成 { start: 1, end: 3 } 然后返回数组 [{ start: 1, end: 3 }]
如果参数{ start: 1, end: 2 },
{ start: 2, end: 3 } { start: 5, end: 6 }
此时返回数组 [{ start: 1, end: 3 }, { start: 5, end: 6 }]
如果参数是
[
{ start: 1, end: 2 },
{ start: 2, end: 3 },
{ start: 5, end: 6 },
{ start: 3, end: 5 },
{ start: 8, end: 9 },
{ start: 11, end: 15 },
]
返回 [{ start: 1, end: 6 }, { start: 8, end: 9 },{ start: 11, end: 15 }]
说一下拍脑袋想到最好理解的思路,肯定有更优解.
定义一个数组.
let mark = [0,0,0,0....0]
初始长度是未定的.
开始遍历传入数组,假如第一个对象是s1e5,先把mark补齐到5位,再把mark的第1个到第5位置改为1.变成
[1,1,1,1,1,...,0]
以此类推
最后得到的mark数组是0和1构成的array.
判断这个array上连续的1出现的起始和结束的位置,组成结果集就可以了.