LC.P1037[有效的回旋镖]

题目描述

给定一个数组 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

方法一:数学

若三点共线,则任意组成的两个向量叉乘为0。

即若A,B,C三点共线,则向量ABX向量BC = 0。

1
2
3
4
5
6
7
8
class Solution {
public boolean isBoomerang(int[][] points) {
// AB X BC = 0
int[] AB = new int[]{points[1][0] - points[0][0], points[1][1] - points[0][1]};
int[] BC = new int[]{points[2][0] - points[1][0], points[2][1] - points[1][1]};
return AB[0] * BC[1] - AB[1] * BC[0] != 0;
}
}
  • 时间复杂度:$O(1)$
  • 空间复杂度:$O(1)$