头条 C++后台第一题

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
class point
{
 long long x;
 long long y;
public:
 long long getx(){return x;}
 long long gety(){return y;}
 point(long long xsize,long long ysize):x(xsize),y(ysize){}
 ~point(){}
};
bool comp(point* p1,point*p2)
{
 return p1->getx()<p2->getx();
}
vector<point> Maxpointset(long long N,vector<point*> &vin)
{
 //deque<long long> d;
 vector<point> v;
 long long j;
 if(N<1||vin.size()==0)
 return v;
 sort(vin.begin(),vin.end(),comp);
 for(long long i=0;i<N/2;i++)
 {
 for(j=i+1;j<N/2;j++)
 {
 if(vin[j]->gety()>vin[i]->gety())
 break;
 }
 if(j==N/2)
 v.push_back(*vin[i]);
 }
 return v;
}

int main()
{
 long long N;
 cin>>N;
 vector<long long> v(2*N);
 vector<point*> vi(N);
 //cout<<v.capacity();
 for(int i=0;i<2*N;i++)
 {
 cin>>v[i];
 if(i%2==1)
 vi[(i-1)/2] = new point(v[i-1],v[i]);
 }
 vector<point> v2= Maxpointset(2*N,vi);
 for(long long i=0;i<N/2;i++)
 {
 delete vi[i];
 }
 for(long long i=0;i<v2.size();i++)
 {
 cout<<v2[i].getx()<<" "<<v2[i].gety()<<endl;
 }
 return 0;
}
#C++工程师#
全部评论
算法很简单,先按x坐标排序,在判断后边的y坐标有没有比自己大的。笔试被电脑搞疯。。。
点赞 回复 分享
发布于 2017-08-23 10:20
哇  兄弟 我跟你的代码差不多  过了50%
点赞 回复 分享
发布于 2017-08-23 11:41
唯一的差别你是new的数据 我是直接栈上分配的然后push到vector  不过排序的时候用的引用优化的
点赞 回复 分享
发布于 2017-08-23 11:42
还是赛码网***了  一个网页  CPU跟内存都给我跑到了80%+
点赞 回复 分享
发布于 2017-08-23 11:43

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务