由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Caeercup150 原题:Find a line passes most points
相关主题
Interview questions: points lie on same lineCS interview question
interview question:找包含点数最多的线段请问Substring with Concatenation of All Words?
Max points on a line[攒人品]昨天的amazon 电面
BB 面经请教昨天那个 binary加法, a + b,怎么算?
Leetcode 新题max points on a line请问以下程序运行结果
除了某家之外,讨论个F的面试题吧,merge 2D interval表达式求值中一元运算符怎么解决
某公司面试经历一道位运算题
问10个老题Google on-site 面试题
相关话题的讨论汇总
话题: line话题: slope话题: eps话题: return话题: intercept
进入JobHunting版参与讨论
1 (共1页)
s********u
发帖数: 1109
1
做了一下7.6,就是找经过点最多的直线。
答案给的比较复杂,是用一个 >的hashmap,在斜率匹配的情况
下,再去vector找匹配的line,而且感觉有bug,在匹配斜率的时候没有考虑斜率无穷
大的情况。
我想了一下C++的做法,比较直观的做法是建立 的hashtable,然后重载一下
预算符,当斜率差和截距差都小于eps = 0.0001的时候视作两条线是同一条线。
但是因为重载这一块不太熟,不知道写的对不对,请大牛们指点一下:
//Given a two-dimensional graph with points on it,find a line which passes
the most number of points.
class Line{
private:
double slope;
double intercept;
bool infinity_slope;
static double eps;

public:
Line(Point1 p1,Point2 p2){

if( abs(p1.x - p2.x) < 0 ){
infinity_slope = true;
intercept = p1.x;
}else{
slope = (p1.y - p2.y)/(p1.x - p2.x);
intercept = p1.y - slope * p1.x;
}
}

bool operator<(const Line& l)const{

if( infinity_slope&& l.infinity_slope )
return (intercept - l.intercept) >= eps);

if( infinity_slope)
return true;

if( l.infinity_slope)
return false;

if( (slope - l.slope) >= eps )
return true;

if( (slope - l.slope) <= (-1) * eps )
return false;

if( (intercept - l.intercept) >= eps )
return true;

if( (intercept - l.intercept) <= (-1)*eps )
return false; //false的情况需要写么?

return false;
}

};
double Line::eps = 0.0001;


Line findBestLine( Point points[],int size){


map lmap;
int count = 0;
Line bestline;

for( int i = 0; i < size; i++){
for( int j = i + 1; i < size; j++){
Line line( points[i], points[j] );
lmap[line]++;
if( lmap[line] > count ){
count = lmap[line];
bestline = line;
}
}
}

return bestline;
}
我查了一下,map的count或者find,应该都是只依赖运算符<的,也就是说只要差值小
于eps,map就会视作相同的key,是这么个道理吧?
s********u
发帖数: 1109
2
还有一个问题就是,如果用unordered_map,写运算符是简单了,只需要写==运算符,
但是hash function要自己写?这个怎么理解呢?为什么map只要重载运算符就行。
T*******e
发帖数: 4928
3
see solution in the end of the following page.
http://www.itint5.com/discuss/237/%E5%A6%82%E6%9E%9C%E7%94%A8%E
s********u
发帖数: 1109
4
Thank you so much!

【在 T*******e 的大作中提到】
: see solution in the end of the following page.
: http://www.itint5.com/discuss/237/%E5%A6%82%E6%9E%9C%E7%94%A8%E

a******e
发帖数: 710
5
==是判断相等用的。和hash func是独立的。即使两个元素hash value一样, 他们也不
一定相等。这时候就要用到==
map是红黑树。只要定义<=就行了

还有一个问题就是,如果用unordered_map,写运算符是简单了,只需要写==运算符,
但是hash function要自己写?这个怎么理解呢?为什么map只要重载运算符就行......
..

【在 s********u 的大作中提到】
: 还有一个问题就是,如果用unordered_map,写运算符是简单了,只需要写==运算符,
: 但是hash function要自己写?这个怎么理解呢?为什么map只要重载运算符就行。

1 (共1页)
进入JobHunting版参与讨论
相关主题
Google on-site 面试题Leetcode 新题max points on a line
Bloomber 面试题除了某家之外,讨论个F的面试题吧,merge 2D interval
QualComm的SKYPE INTERVIEW面经某公司面试经历
请教一道面试题,关于tree的问10个老题
Interview questions: points lie on same lineCS interview question
interview question:找包含点数最多的线段请问Substring with Concatenation of All Words?
Max points on a line[攒人品]昨天的amazon 电面
BB 面经请教昨天那个 binary加法, a + b,怎么算?
相关话题的讨论汇总
话题: line话题: slope话题: eps话题: return话题: intercept