149. 直线上最多的点数
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出: 4
解释:
^
|
| o
| o o
| o
| o o
+—————————->
0 1 2 3 4 5 6
//采用查找表解决,key为两点直线的斜率,value为相同直线的点的个数func maxPoints(points [][]int) int {//以i点为枢纽,找到与i点组成的直线的斜率相同的点resMax := 0 //返回值for i:=0;i<len(points);i++{//建立一个key为两点斜率,可能为浮点数,所以才要float64,value为相同斜率点的个数hash := make(map[float64]int)for j:=0;j<len(points);j++{if i != j{ //不能是同一个点组成直线hash[lineSlope(points[i],points[j])]++}}for _,v := range hash{if v > resMax{ //遍历hash表,同一直线最多的点数resMax = v}}}return resMax + 1 //因为hash表没有统计点i它自身,所以需要加一}func lineSlope(a,b []int)float64{return float64(a[1]-b[1]) / float64(a[0]-b[0]) //相当于(ay-by) / (ax-bx)}
