Leetcode 1232. 綴點成線 (判斷所有點是否在一條直線上,簡單的計算幾何問題)

 

直接用斜率會出現以下問題:

1. 斜率不存在,需要特判

2. 斜率爲浮點數

 

最好的方法是把斜率改成乘法:實際上就是先解出直線方程,然後驗證所有點是否都滿足直線方程,也可以用叉積,來理解,時間複雜度O(N)

class Solution {
public:
    bool checkStraightLine(vector<vector<int>>& coordinates) {
        int dx0 = coordinates[1][0] - coordinates[0][0];
        int dy0 = coordinates[1][1] - coordinates[0][1];
        int n = coordinates.size();
        for(int i=2;i<n;i++){
            int dx1 = coordinates[i][0] - coordinates[0][0];
            int dy1 = coordinates[i][1] - coordinates[0][1];
            if(dx0*dy1!=dx1*dy0) return false;
        }
        return true;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章