Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
在平面上给n个点,求一条直线上最多有几个点。
第一反应是 两两结合,获取直线,判断其他点在不在直线上,复杂度n^3
注意相同的点算是两个点,所以只在第二层循环过滤相同的点,且需要记下有几个相同的点
package main
type Point struct {
X int
Y int
}
/**
*
* @param points Point类一维数组
* @return int整型
*/
func maxPoints(points []*Point) int {
// write code here
num := len(points)
if num <= 2 {
return num
}
var i, j, k int
max := 2
for i = 0; i < num; i++ {
x1 := points[i].X
y1 := points[i].Y
same := 0
for j = i + 1; j < num; j++ {
x2 := points[j].X
y2 := points[j].Y
if x1 == x2 && y1 == y2 {
same++
continue
}
tmp := 2
for k = j + 1; k < num; k++ {
x3 := points[k].X
y3 := points[k].Y
if (x3-x1)*(y1-y2) == (x1-x2)*(y3-y1) {
tmp++
}
}
if tmp > max {
max = tmp + same
}
}
}
return max
}