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

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 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_1 k1,第二个点和第三个点的连线的斜率是 k 2 k_2 k2,那么当 k 1 ≠ k 2 k_1\\neq k_2 k1=k2时,三点不共线,能构成“回旋镖”

斜率的求法: k = Δ y Δ x k=\\frac\\Delta y\\Delta x k=ΔxΔy

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

因此要判断 Δ y 1 Δ x 1 \\frac\\Delta y1\\Delta x1 Δx1Δy1是否等于 Δ y 2 Δ x 2 \\frac\\Delta y2\\Delta x2 Δx2Δy2,只需要判断 Δ y 1 × Δ x 2 \\Delta y1 \\times \\Delta x2 Δy1×Δx2是否等于 Δ y 2 × Δ x 1 \\Delta y2 \\times \\Delta x1 Δy2×Δx1即可。

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

AC代码

C++

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

以上是关于LeetCode 1037.有效的回旋镖:斜率 - 一行解决的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1037. 有效的回旋镖

Python描述 LeetCode 1037. 有效的回旋镖

1037. 有效的回旋镖

LeetCode 678. 有效的括号字符串(贪心,动规) / 4. 寻找两个正序数组的中位数(二分,关键题) / 447. 回旋镖的数量

Leetcode——回旋镖

《LeetCode之每日一题》:148.回旋镖的数量