Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第一题:给出一个区间的集合,请合并所有重叠的区间 #1

Open
DeronEndless opened this issue Jul 2, 2020 · 0 comments

Comments

@DeronEndless
Copy link
Owner

DeronEndless commented Jul 2, 2020

解题思路:

  1. 首先用每个区间的start字段来进行升序排序
  2. 核心思路,取出数组的第0个放入result集合里,然后循环从第1个开始和result.length - 1个比较,如果当前的的start <= result.length - 1个的end,说明有重叠,替换集合里面的start为两区间start的最小值,end为两区间的最大值

时间复杂度:O(n)
空间复杂度:O(1)

const list = [
  { start: 4, end: 6 },
  { start: 3, end: 5 },
  { start: 2, end: 4 },
  { start: 7, end: 8 }
];

const merge = intervals => {
  intervals.sort((a, b) => a.start - b.start);
  const result = [];
  result.push(intervals[0]);

  for (let i = 1; i < intervals.length; i++) {
    if (intervals[i].start <= result[result.length - 1].end) {
      result[result.length - 1].start = Math.min(
        intervals[i].start,
        result[result.length - 1].start
      );
      result[result.length - 1].end = Math.max(
        intervals[i].end,
        result[result.length - 1].end
      );
    } else {
      result.push(intervals[i]);
    }
  }

  return result;
};

console.log(merge(list));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant