题目
解法:向量叉乘
「三点各不相同且不在一条直线上」等价于「两个向量的叉乘结果不为零」:
v
⃗
1
×
v
⃗
2
≠
0
\vec{v}_{1} \times \vec{v}_{2} \neq 0
v1×v2=0
两个向量的叉积等于零,则它们平行
算法流程:
- 由
points[0]
和points[1]
计算向量 v ⃗ 1 \vec{v}_{1} v1,由points[0]
和points[2]
计算向量 v ⃗ 2 \vec{v}_{2} v2 - 计算两向量的叉乘
class Solution {
public boolean isBoomerang(int[][] points) {
int[] v1 = {points[0][0] - points[1][0], points[0][1] - points[1][1]};
int[] v2 = {points[0][0] - points[2][0], points[0][1] - points[2][1]};
return v1[0] * v2[1] != v1[1] * v2[0];
}
}
- 时间复杂度: O ( 1 ) O(1) O(1)
- 空间复杂度: O ( 1 ) O(1) O(1)