C++ 我们可以通过排序左起点来解决逐点覆盖问题吗

C++ 我们可以通过排序左起点来解决逐点覆盖问题吗,c++,python-3.x,algorithm,C++,Python 3.x,Algorithm,我看过很多关于这个问题的文章和解决方案,它们总是按正确的端点排序 我试图通过对左起点排序来解决这个问题,但我不明白为什么在某些情况下它不起作用,这是我的代码: struct Segment { int start, end; }; bool comp (struct Segment s1 , struct Segment s2) { int a = s1.start; int b = s2.start; return a < b ; } vector<in

我看过很多关于这个问题的文章和解决方案,它们总是按正确的端点排序 我试图通过对左起点排序来解决这个问题,但我不明白为什么在某些情况下它不起作用,这是我的代码:

struct Segment {
  int start, end;
};
bool comp (struct Segment s1 , struct Segment s2)
{
    int a = s1.start;
    int b = s2.start;
    return a < b ;
}
vector<int> optimal_points(vector<Segment> &segments) {
  vector<int> points;
  std::sort(segments.begin(),segments.end(),comp);

  int i = 0 ;
  int n = segments.size();
  while (i < n )
  {
      int o = i ;
      i++;
      while (i < n && segments[i].start <= segments[o].end)
      {

          i++;

      }

     points.push_back(segments[i-1].start);
  }

  return points;
}
struct段{
int开始,结束;
};
bool comp(结构段s1、结构段s2)
{
int a=s1.start;
int b=s2.start;
返回a而(i
segments[o]
结束之前开始和结束,而您只是错过了它

段数组{(1:10)、(2:3)、(4:5)、(6:7)}按左端排序

对于i=0,指定o=0,并将2,4,6与10进行比较,直到i达到4


现在你把6分压进去。但是覆盖(2:3)和(4:5)呢?

欢迎使用堆栈溢出。请阅读、接受SO、阅读以及。最后,请回答您的问题以改进它,例如描述您所显示的代码存在的问题以及您所做的调试尝试。以及删除不相关的标记。我按起始点对段进行排序,这意味着始终是段[I]。开始>段[o] .start(因为在while循环中,始终i至少是o+1)所以表示任何段[i]。开始看加法。