携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
一、题目描述:
1037. 有效的回旋镖 - 力扣(LeetCode) (leetcode-cn.com)
给定一个数组 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:(xa,ya),B:(xb,yb),C:(xc,yc),分别按顺序对应数组中的三个点。 要求A、B、C三点不在同一条直线上,需要 向量AB与向量AC不共线。 向量AB = (x1,y1),其中 x1 = xb - xa,y1 = yb - ya 向量BC = (x2,y2),其中 x2 = xc - xb, y2 = yc - yb
若AB、BC共线,则:y1/x1 = y2/x2。为了防止出现 x1 或者 x2 等于 0 的情况,将等式进行处理, 变为乘法的形式,即:y1x2 = y2x1。 满足该等式即返回“false”,不满足则返回“true”。
三、AC 代码:
class Solution {
public boolean isBoomerang(int[][] points) {
int x1 = points[1][0] - points[0][0],x2 = points[2][0] - points[0][0];
int y1 = points[1][1] - points[0][1],y2 = points[2][1] - points[0][1];
if(y1 * x2 == y2 * x1)
return false;
return true;
}
}
四、总结:
数学小知识 计算几何学中利用叉积判断两条线的相对位置,当且仅当叉积为0时,向量共线。
范文参考:
利用两点间的斜率进行计算,如果存在两个点相同,则返回false,如果存在三个点连接之间的斜率相同也返回false,否则为true - 有效的回旋镖 - 力扣(LeetCode)