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;