LeetCode 1232 Check If It Is a Straight Line【 缀点成线,数学】

本文介绍了一种算法,用于判断给定点集是否位于一条直线上。通过计算两点间的坐标差,对比后续各点与首点的坐标差比例,实现点共线性的验证。适用于计算机图形学、数据分析等领域。

题目链接 1232. Check If It Is a Straight Line | 1232. 缀点成线

You are given an array coordinates, coordinates[i] = [x, y], where [x, y] represents the coordinate of a point. Check if these points make a straight line in the XY plane.

Input: coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
Output: true
Input: coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
Output: false

Constraints:

  • 2 <= coordinates.length <= 1000
  • coordinates[i].length == 2
  • -10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4
  • coordinates contains no duplicate point.

题意

  • 坐标中的点以二元组的形式给出,验证给出的所有点是否在一条直线上。

思路1

  • 因为至少两个点,先计算前两个点的横坐标之差x0和纵坐标之差y0
  • 再遍历其后的所有点,分别计算与第一个点的横坐标之差 xi和纵坐标之差yi
  • 验证 y0 * xi != x0 * yi 是否相等,若出现了一个不相等,则不可能共线。
  • 使用乘法的原因是为了避免分母为0的异常情况

代码1

class Solution {
public:
    bool checkStraightLine(vector<vector<int>>& coordinates) {
        int y0 = coordinates[1][1] - coordinates[0][1];
        int x0 = coordinates[1][0] - coordinates[0][0];
        for(int i = 2; i < coordinates.size(); i++)
        {
            int yi = coordinates[i][1] - coordinates[0][1];
            int xi = coordinates[i][0] - coordinates[0][0];
            if(y0 * xi != x0 * yi)
                return false;
        }
        return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值