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 <= 1000coordinates[i].length == 2-10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4coordinatescontains 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;
}
};
本文介绍了一种算法,用于判断给定点集是否位于一条直线上。通过计算两点间的坐标差,对比后续各点与首点的坐标差比例,实现点共线性的验证。适用于计算机图形学、数据分析等领域。

243

被折叠的 条评论
为什么被折叠?



