56. 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

 

static bool  cmp(vector num1, vector num2) {

  if (num1[1] < num2[1])

  {

    return true;

  }

  if (num1[1] == num2[1] && num1[0] > num2[0])

  {

    return true;     // 可以简单理解为 >: 降序排列;  < : 升序排列

  }

  return false;

}


 

vector> merge(vector>& intervals)

{

  sort(intervals.begin(), intervals.end(),cmp);

  vector>vec;

  int curInt = intervals.size() - 1;

  while (curInt >= 0)

  {

    vector top = intervals[curInt];

    int secondInt = curInt - 1;

    while (secondInt >= 0)

    {

      vector second = intervals[secondInt];

      if (top[0]

      {

        secondInt--;

        continue;

      }

      if (top[0] >= second[0] && top[0] <= second[1])

      {

        top[0] = second[0];

        secondInt--;

        continue;

      }

      break;

    }

      vec.push_back(top);

    curInt = secondInt;

  }

  return vec;

}

你可能感兴趣的:(算法)