Hà Phan（河）

Problem

Check If It Is a Straight Line

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.

Example 1:

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

Example 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
• coordinates contains no duplicate point.

Solution

Apply formula dx1 * dy2 = dx2 * dy1; dx, dy is absolute different between two points.
Calculate first pairs, then a straight loop for the rest points.

class Solution {
func checkStraightLine(_ coordinates: [[Int]]) -> Bool {
if coordinates.count < 2 {
return true
}
let delta = lineAngle(coordinates[0], coordinates[1])
for i in 2..<coordinates.count {
let deltaK = lineAngle(coordinates[i], coordinates[i - 1])
if deltaK != delta {
return false
}
}
return true
}

func lineAngle(_ p1: [Int], _ p2: [Int]) -> Delta {
return Delta(dx: abs(p1[0] - p2[0]), dy: abs(p1[1] - p2[1]))
}

struct Delta : Equatable {
var dx: Int
var dy: Int

static func ==(_ lhs: Delta, _ rhs: Delta) -> Bool {
return lhs.dx * rhs.dy == lhs.dy * rhs.dx
}
}

}