1037.有效的回旋镖

【LetMeFly】1037.有效的回旋镖:斜率 - 一行解决

力扣题目链接:https://leetcode.cn/problems/valid-boomerang/

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

方法一:斜率 - 一行解决

假设第一个点和第二个点的连线的斜率是$k_1$,第二个点和第三个点的连线的斜率是$k_2$,那么当$k_1\neq k_2$时,三点不共线,能构成“回旋镖”

斜率的求法:$k=\frac{\Delta y}{\Delta x}$

但是出现除法的话,一是会有精度问题,而是还要特判分母是否为0。

因此要判断$\frac{\Delta y1}{\Delta x1}$是否等于$\frac{\Delta y2}{\Delta x2}$,只需要判断$\Delta y1 \times \Delta x2$是否等于$\Delta y2 \times \Delta x1$即可。

  • 时间复杂度$O(1)$
  • 空间复杂度$O(1)$

result

AC代码

C++

1
2
3
4
5
6
class Solution {
public:
bool isBoomerang(vector<vector<int>>& points) {
return (points[0][0] - points[1][0]) * (points[1][1] - points[2][1]) != (points[1][0] - points[2][0]) * (points[0][1] - points[1][1]);
}
};

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125793916


1037.有效的回旋镖
https://blog.letmefly.xyz/2022/07/14/LeetCode 1037.有效的回旋镖/
作者
Tisfy
发布于
2022年7月14日
许可协议