LeetCode.1037-有效的回旋镖(Valid Boome

作者: 程序员小川 | 来源:发表于2019-07-19 08:46 被阅读2次

这是小川的第387次更新,第416篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第248题(顺位题号是1037)。回旋镖是一组各不相同且不在一条直线上的三个点。给出三个点的列表,判断这些点是否是回旋镖。

例如:

输入:[[1,1],[2,3],[3,2]]
输出:true

输入:[[1,1],[2,2],[3,3]]
输出:false

注意

  • points.length == 3

  • points[i].length == 2

  • 0 <= points[i][j] <= 100

02 第一种解法

要判断三个点是否能构成回旋镖,一是三个点各不相同,二是不能在一条直线上,即二维数组中三对坐标两两值不相等,且任意两对坐标的斜率不能相等。直接将题目的意思翻译过来即可,但是在计算两点的斜率时,如果分母为0或者分子为0,即这两个点可能与x轴、y轴平行,需要返回false。另外算斜率要用double类型,不能用int类型。

public boolean isBoomerang(int[][] points) {
    int x1 = points[0][0], x2 = points[1][0], x3 = points[2][0];
    int y1 = points[0][1], y2 = points[1][1], y3 = points[2][1];
    // 坐标两两不等
    if ((x1 == x2 && y1 == y2) || (x2==x3 && y2==y3) || (x1==x3 && y1==y3)) {
        return false;
    }
    // 不能和x轴、y轴平行
    if ((x1 == x2 && x2 == x3) || (y1 == y2 && y2 == y3)) {
        return false;
    }
    // 计算斜率
    double slope = (y2-y1)/((double)x2-x1);
    double slope2 = (y3-y2)/((double)x3-x2);
    return slope != slope2;      
}

03 第二种解法

还可以从另外的角度来看,依旧是数学角度,根据题目给的回旋镖定义,要是三个点能够组成一个回旋镖,那么三个点合成的区域一定是一个三角形。那么我们可以计算出三条边的长度,用三角形的定义来判断三条边能否组成一个三角形。

public boolean isBoomerang2(int[][] points) {
    int x1 = points[0][0], x2 = points[1][0], x3 = points[2][0];
    int y1 = points[0][1], y2 = points[1][1], y3 = points[2][1];
    // 计算三边的长度
    double a = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    double b = Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
    double c = Math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
    boolean flag = a+b>c && a+c>b && b+c>a;
    boolean flag2 = a-b<c && a-c<b && b-c<a;
    return  flag && flag2;
}

04 小结

算法专题目前已连续日更超过七个月,算法题文章254+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

相关文章

  • LeetCode.1037-有效的回旋镖(Valid Boome

    这是小川的第387次更新,第416篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第2...

  • 回旋镖

    心里有点堵,自己一直这么信任,这么支持的人,原来就是在背后传言我的人!承认我非贤圣,乍一听到,心里那种感觉...

  • 回旋镖

    “妈妈,你能瞧得上**吗?”大妞问我的这个人是她以前的同学,她知道我不是很喜欢这个同学。 “嗯,怎么说,我是不喜欢...

  • 1037. 有效的回旋镖(Python)

    更多精彩内容,请关注【力扣简单题】。 题目 难度:★★☆☆☆类型:集合,二维数组 题目 回旋镖定义为一组三个点,这...

  • LeetCode刷题-有效的回旋镖

    前言说明 算法学习,日常刷题记录。 题目连接 有效的回旋镖[https://leetcode-cn.com/pro...

  • LeetCode 查找表专题 6:灵活选择键值:Number o

    例题:LeetCode 第 477 题:回旋镖的数量 传送门:447. 回旋镖的数量。 给定平面上 n 对不同的点...

  • 木头回旋镖

    鲍勃在晚上九点,按时把六粒黑色的药片顺水咽下肚子。可是胃里依旧不怎么好受,虽然他体型瘦弱,胃部一直就不怎么舒...

  • 回旋镖的数量

    题目描述 给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的...

  • 爱的回旋镖

    晨间打开手机,看到远方朋友发来的信息: 今天听一段语音,其中有一句:当你想到一个人这个人让你感觉很温暖,很有力量,...

  • 爱的回旋镖

    昨天我发出了下乡需要司机的感召,有一个叫“徐林伟”的微友给我留言,说可以帮我开车去阜山。 这个朋友从来没有聊过天,...

网友评论

    本文标题:LeetCode.1037-有效的回旋镖(Valid Boome

    本文链接:https://www.haomeiwen.com/subject/xbwdlctx.html