第5章 第11节 查找

●   手写代码:二分查找的代码

参考回答:

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;elsereturn m;}



return -1;//没有找到对应的元素,返回-1.


}

●   一个二维座标系,给你n个点的座标,画一条直线把他们分成两份(任意直线),要求数量尽量等分,复杂度不能太高。

参考回答:


我下意识觉得考察我图论,想了一下感觉不是的,然后给他讲了讲我的思路:假设按照y座标分,那么遍历n个座标,用一个最大堆来保存,然后从顶部弹出n/2次,如果当前顶部的数和最后弹出的数不一样,就可以在中间画一条线)他说如果所有点纵座标都一样呢?如果有点重合的呢?(我有点蒙蔽了,觉得我这思路是错的,又想了几分钟其他的方法,又不由自主往图论上想,最后还是没想起来。其实貌似再同样做法对横座标处理一次应该可以避免他说的问题吧),最后问他怎么做,他说用二分的思想,然后对横纵座标求中位数、众数什么的。 

图片


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章