1232. Check If It Is a Straight Line

1232. Check If It Is a Straight Line

Description

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

Example 1:

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

Example 2:

1
2
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
  • coordinatescontains no duplicate point.

Hints/Notes

Solution

Language: C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
bool checkStraightLine(vector<vector<int>>& coordinates) {
if (coordinates.size() == 2) {
return true;
}
int dx0 = coordinates[0][0] - coordinates[1][0];
int dy0 = coordinates[0][1] - coordinates[1][1];
// dy0 / dx0 = dy / dx => dy0 * dx = dx0 * dy
int n = coordinates.size();
for (int i = 2; i < coordinates.size(); i++) {
int dx = coordinates[i][0] - coordinates[0][0];
int dy = coordinates[i][1] - coordinates[0][1];
if (dx * dy0 != dx0 * dy) {
return false;
}
}
return true;
}
};