# Leetcode 149. Max Points on a Line ## 題目內容: 給定一個二維陣列表示其座標ex:[[1,0][2,0]]表示(1,0),(2,0),計算在同一條直線存在最多幾個點 示範測資: ![](https://i.imgur.com/qcNLnPv.png) ![](https://i.imgur.com/17MLHI7.png) ## 解題思路 解題思路(暴力法): 1.固定其中一筆資料計算與其他筆資料的斜率,再去檢查此斜率與固定資料和其他筆資料的斜率是否相等 ## 注意事項: 1.斜率算法 m = (y1-y2)/(x1-x2),在數學中x1 = x2為鉛直線但程式再跑這段程式碼會runtime error 所以可以把它訂為某個不會出現的數。 2.資料型態的部分,題目給你的資料型態為int但斜率有可能是小數,須強制轉型成float。 ## C的參考程式碼 ``` float M(float x1,float y1,float x2,float y2){ if(x1==x2)return INT_MAX; float m = (y1-y2)/(x1-x2); return m; } int maxPoints(int** points, int pointsSize, int* pointsColSize){ float m; int max = 1; if(pointsSize==1)return 1; for(int i = 0;i<pointsSize-1;i++){ for(int j = i+1;j<pointsSize;j++){ int cnt = 1; m = M((float)points[i][0],(float)points[i][1],(float)points[j][0],(float)points[j][1]); for(int k = 0;k<pointsSize;k++){ if(k==i)continue; if(m == M((float)points[i][0],(float)points[i][1],(float)points[k][0],(float)points[k][1]))cnt++; max = (max<cnt)?cnt:max; } } } return max; } ```