1. 程式人生 > 其它 >【Leetcode刷題筆記 持續更新】Day05

【Leetcode刷題筆記 持續更新】Day05

技術標籤:刷題筆記

Day05

今天堅持住了,因為每日一題很簡單,沒用到什麼複雜演算法,要不我這小腦袋瓜是絕對不行的。自己寫出來的,但是提交結果就很…來張截圖,這就是贏了空間敗給時間麼…
結果看了一些別人的,才發現上頭了。。在思路里說
在這裡插入圖片描述

綴點成線

在一個 XY 座標系中有一些點,我們用陣列 coordinates 來分別記錄它們的座標,其中 coordinates[i] = [x, y] 表示橫座標為 x、縱座標為 y 的點。
請你來判斷,這些點是否在該座標系中屬於同一條直線上,是則返回 true,否則請返回 false。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/check-if-it-is-a-straight-line

思路:

因為是判斷點是否在一條直線上,所以裡邊只要有一個點不符合就可以了,我最開始想到的是兩點法,即斜率為定值,但是我用的是除法,在這裡就產生了問題,如果他與x軸或y軸平行或重合就會很麻煩,我也沒有察覺有什麼不妥,就直接傻乎乎的分情況討論加判斷。。。
其實應該轉換一下思路,用乘法,這樣就不會出現除數為0的情況,又簡單又省事…這就是我知識淺薄,不找藉口了,就是菜…
這也告訴我,以後若碰見除法運算時,儘可能轉換為乘法。

我最開始的

class Solution {
public:
    bool isparallel(vector<vector<int>>& coordinates,
int m) { int length=coordinates.size(); for(int i=0;i<length;i++) { for(int j=i+1;j<length;j++) { if((coordinates[i][m]-coordinates[j][m])==0) { return true; }
} } return false; } bool checkStraightLine(vector<vector<int>>& coordinates) { int length=coordinates.size(); if(isparallel(coordinates,0)==true) { for(int i=0;i<length;i++) { for(int j=i+1;j<length;j++) { if((coordinates[i][0]-coordinates[j][0])!=0) { return false; } } } return true; } else if(isparallel(coordinates,1)==true) { for(int i=0;i<length;i++) { for(int j=i+1;j<length;j++) { if((coordinates[i][1]-coordinates[j][1])!=0) { return false; } } } return true; } else { float k=(coordinates[0][1]-coordinates[1][1])/(coordinates[0][0]-coordinates[1][0]); for(int i=0;i<length;i++) { for(int j=i+1;j<length;j++) { if(k!=(coordinates[i][1]-coordinates[j][1])/(coordinates[i][0]-coordinates[j][0])) { return false; } } } return true; } } };

別人家的

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