主页有其他数据结构内容(持续更新中)
难度:Hard
代码:
哈希表
必须要考虑斜率不存在和重复点的情况
class Solution {
public:
int maxPoints(vector<vector<int>>& points) {
unordered_map<double, int> dic; // <斜率,该直线上点的数量>
int maxNum = 0;
int samePointsNum; // 相同的点的数量
int sameXaxisNum; // 横坐标相同的点的个数(斜率不存在的这条直线上点的数量)
for(int i = 0; i < points.size(); i++){
// 遍历每一个点
samePointsNum = sameXaxisNum = 1;
for(int j = i + 1; j < points.size(); j++){
// 往后找
if(points[i][0] == points[j][0]){ // 横坐标相同(斜率不存在)
sameXaxisNum++;
if(points[i][1] == points[j][1]){ //同一个点
samePointsNum++;
}
}
else{ // 斜率存在
double dx = points[i][0] - points[j][0];
double dy = points[i][1] - points[j][1];
double slope = dy / dx;
dic[slope]++;
}
}
// 先和斜率不存在的直线上点的数量比较
maxNum = max(maxNum, sameXaxisNum);
// 再和所有斜率存在的直线点的数量(要加上和当前第i个点相同的点的数量)比较
for(auto c : dic){
maxNum = max(maxNum, samePointsNum + c.second);
}
dic.clear();
}
return maxNum;
}
};