---
# System prepended metadata

title: Leetcode 149. Max Points on a Line

---

# 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;
}
```
