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而(isegments[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]。开始看加法。