目录
● 一个二维坐标系,给你n个点的坐标,画一条直线把他们分成两份(任意直线),要求数量尽量等分,复杂度不能太高。
● 手写代码:二分查找的代码
参考回答:
int binarySearch(vector<int> x,int t)
{
int mid,l=0;
int u = x.size()-1;
while(l<=u)
{
mid = l+(u-l)/2;
if(x[m]<t)
l=m+1;
else if(x[m]>t)
u=m-1;
else
return m;
}
return -1;//没有找到对应的元素,返回-1.
}
● 一个二维坐标系,给你n个点的坐标,画一条直线把他们分成两份(任意直线),要求数量尽量等分,复杂度不能太高。
参考回答:
我下意识觉得考察我图论,想了一下感觉不是的,然后给他讲了讲我的思路:假设按照y坐标分,那么遍历n个坐标,用一个最大堆来保存,然后从顶部弹出n/2次,如果当前顶部的数和最后弹出的数不一样,就可以在中间画一条线)他说如果所有点纵坐标都一样呢?如果有点重合的呢?(我有点蒙蔽了,觉得我这思路是错的,又想了几分钟其他的方法,又不由自主往图论上想,最后还是没想起来。其实貌似再同样做法对横坐标处理一次应该可以避免他说的问题吧),最后问他怎么做,他说用二分的思想,然后对横纵坐标求中位数、众数什么的。