力扣-1232 缀点成线

题目描述

在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。
请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。

示例

示例 1:
力扣-1232 缀点成线_第1张图片
输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
输出:true

示例 2:
力扣-1232 缀点成线_第2张图片
输入:coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
输出:false

源代码

思路:直接判断斜率是否相等,用第一个点和第二个点的斜率为定值(因为两点必为直线),然后判断第一个点和第三个,第四个…,
由于除法不好比较,我们转换为乘法。

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

复杂度分析:

  • 时间复杂度:O(n),其中 n 是数组中的元素数量。
  • 时间复杂度:O(1)

力扣-1232 缀点成线_第3张图片

你可能感兴趣的:(力扣题库,leetcode,算法)