您的位置:首页 > 其它

leetcode 149 —— Max Points on a Line

2015-08-17 16:34 405 查看
Given n points
on a 2D plane, find the maximum number of points that lie on the same straight line.
思路:因为一个float的类型转化折腾了好久

<pre name="code" class="cpp">float k = (float)(points[i].y - points[j].y) / (points[i].x - points[j].x); //对
<pre name="code" class="cpp">float k = float(points[i].y - points[j].y) / (points[i].x - points[j].x);    //对


float k = float((points[i].y - points[j].y) / (points[i].x - points[j].x));  //错
<pre name="code" class="cpp">float k = (float)((points[i].y - points[j].y) / (points[i].x - points[j].x));//错





class Solution {
public:
int maxPoints(vector<Point>& points) {
if (points.size() <= 2) return points.size();

unordered_map<float, int> myHash;
int maxNums = INT_MIN;
for (int i = 0; i < points.size(); i++){
myHash.clear();
myHash[(float)INT_MAX] = 0;
int samePoints = 1;
for (int j = 0; j < points.size(); j++){
if (i == j) continue; //同一个点
if (points[i].x == points[j].x&&points[i].y == points[j].y){ //相同的点
samePoints++;
continue;
}
if (points[i].x == points[j].x){ //与y轴平行
myHash[INT_MAX]++;
}
else{
float k = (float)(points[i].y - points[j].y) / (points[i].x - points[j].x);//此处的类型转化,后面表达式一定不能带括号
myHash[k]++;
}
}

for (auto j = myHash.begin(); j != myHash.end(); ++j){
int tmp = j->second + samePoints;
maxNums = maxNums > tmp ? maxNums : tmp;
}
}
return maxNums;
}
}a;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: