相关标签
一、题目要求
二、题解和代码实现
1.题解
非官方题解
2.代码实现
代码如下(示例):
class Solution {
public int maxPoints(int[][] ps) {
int n = ps.length;
int ans = 1;
for (int i = 0; i < n; i++) {
Map<String, Integer> map = new HashMap<>();
// 由当前点 i 发出的直线所经过的最多点数量
int max = 0;
for (int j = i + 1; j < n; j++) {
//x1 y1 是当前i下标的x和y,x2 y2 是从i下标后面的元素的x和y
int x1 = ps[i][0], y1 = ps[i][1], x2 = ps[j][0], y2 = ps[j][1];
int a = x1 - x2, b = y1 - y2;
int k = gcd(a, b);//求出斜率
String key = (a / k) + "_" + (b / k);//生成key
map.put(key, map.getOrDefault(key, 0) + 1);//存进map
max = Math.max(max, map.get(key));//得到该i下标 开始最多点数连成直线的最大个数
}
ans = Math.max(ans, max + 1);//和当前连成直线的最大个数相比,大者赋值到当前连成直线的最大个数(ans)
}
return ans;
}
int gcd(int a, int b) {//求斜率
return b == 0 ? a : gcd(b, a % b);
}
}