目录

LC 1037. 有效的回旋镖 (opens new window) (opens new window)

简单

# 问题描述

给定一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点,如果这些点构成一个 回旋镖 则返回 true

回旋镖 定义为一组三个点,这些点 各不相同不在一条直线上

示例 1:

输入:points = [[1,1],[2,3],[3,2]]
输出:true

示例 2:

输入:points = [[1,1],[2,2],[3,3]]
输出:false

提示:

  • points.length == 3
  • points[i].length == 2
  • 0 <= xi, yi <= 100

# 数学

假设三点分别为 a:(x1,y1)a:(x_1,y_1)b:(x2,y2)b:(x_2,y_2)c:(x3,y3)c:(x_3,y_3)

aba\text{、}b 斜率: k1=y2y1x2x1k_1 = \dfrac {y_2 - y_1}{x_2 - x_1}

aca\text{、}c 斜率: k2=y3y1x3x1k_2 = \dfrac {y_3 - y_1}{x_3 - x_1}

若三点不在同一直线上,有 k1k2k_1 \neq k_2,即 (y2y1)×(x3x1)(y3y1)×(x2x1)(y_2 - y_1) \times (x_3 - x_1) \neq (y_3 - y_1) \times (x_2 - x_1)

/**
 * @param {number[][]} points
 * @return {boolean}
 */
var isBoomerang = function (points) {
  const v1 = [points[1][0] - points[0][0], points[1][1] - points[0][1]]
  const v2 = [points[2][0] - points[0][0], points[2][1] - points[0][1]]
  return v1[1] * v2[0] !== v2[1] * v1[0]
}
  • 时间复杂度:O(1)O(1)
  • 空间复杂度:O(1)O(1)
上次更新: 2023/01/31 19:48:05

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 , 转载请注明出处!