149. 直线上最多的点数
题目:


题解:
java
class Solution {
public int maxPoints(int[][] points) {
if(points.length <= 2) {
return points.length;
}
int n=points.length;
int max_sum = 0;
for(int i=0;i<points.length;i++) {
for(int j=i+1;j<points.length;j++) {
int count = 2;
int x1 = points[i][0];
int y1 = points[i][1];
int x2 = points[j][0];
int y2 = points[j][1];
if (x1 == x2) {
// 垂直线
for (int k = 0; k < n; k++) {
if (k != i && k != j && points[k][0] == x1) {
count++;
}
}
} else if (y1 == y2) {
// 水平线
for (int k = 0; k < n; k++) {
if (k != i && k != j && points[k][1] == y1) {
count++;
}
}
} else {
// 斜线
double k_val = 1.0 * (y2 - y1) / (x2 - x1);
double b_val = y1 - k_val * x1;
for (int k = 0; k < n; k++) {
if (k != i && k != j) {
double y_pred = k_val * points[k][0] + b_val;
if (Math.abs(y_pred - points[k][1]) < 1e-6) {
count++;
}
}
}
}
max_sum = Math.max(max_sum, count);
}
}
return max_sum;
}
}