这是小川的第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 Boomerang)的更多相关文章

  1. 【Leetcode_easy】1037. Valid Boomerang

    problem 1037. Valid Boomerang 参考 1. Leetcode_easy_1037. Valid Boomerang; 完

  2. LeetCode 1037. Valid Boomerang (有效的回旋镖)

    题目标签:Math 题目给了我们三个点,让我们判断这三个点是否在一条直线上. 利用斜率 k = (y1 - y0) / (x1 - x0) 来判断,如果 三个点 abc, ab 的斜率 = bc 的斜 ...

  3. 【LeetCode】1037. Valid Boomerang 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 中学数学题 日期 题目地址:https://leet ...

  4. 【leetcode】1037. Valid Boomerang

    题目如下: A boomerang is a set of 3 points that are all distinct and not in a straight line. Given a lis ...

  5. [LeetCode] Number of Boomerangs 回旋镖的数量

    Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...

  6. LeetCode 笔记系列八 Longest Valid Parentheses [lich你又想多了]

    题目:Given a string containing just the characters '(' and ')', find the length of the longest valid ( ...

  7. LeetCode 20. 有效的括号(Valid Parentheses)

    20. 有效的括号 20. Valid Parentheses 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须 ...

  8. leetcode第31题--Longest Valid Parentheses

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  9. leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题

    三星机试也考了类似的题目,只不过是要针对给出的数独修改其中三个错误数字,总过10个测试用例只过了3个与世界500强无缘了 36. Valid Sudoku Determine if a Sudoku ...

随机推荐

  1. Ruby笔记

    1.数组遍历方法总结 array = (1..10).to_a length = array.length length.times do t print "#{array[t]} &quo ...

  2. 什么是Web Service(Web服务)?

    从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API.例如可以创建一个提供天气预报的Web Service,那么无论你用哪种编程语言开发的应用都可以通过 ...

  3. Centos7——docker入门(笔记)

    docker 入门(笔记) 一.Docker是什么? 官方原话: Docker provides a way to run applications securely isolated in a co ...

  4. CSS3实现穿墙广告效果

    ㈠分享一组很有趣的代码: 具体如下: <!doctype html> <html> <head> <meta charset="UTF-8" ...

  5. Java基础-自增自减运算符练习题

    我们用一个简单的例子分析下边的运行结果: package demo; public class ZiZeng { int i = 0; test(i); // i = i++; i = ++i; Sy ...

  6. ZJOI2010 诸神眷顾的幻想乡

    题目链接:戳我 非常不好意思,因为想要排版,所以今天先只把代码贴出来,明天补题解. #include<iostream> #include<cstdio> #include&l ...

  7. Thread的setDaemon(true)方法的作用

    定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开.优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务.设置:通过setDaemon(true)来设置线程为“守护线 ...

  8. 「雅礼集训 2017 Day5」远行

    题目链接 问题分析 要求树上最远距离,很显然就想到了树的直径.关于树的直径,有下面几个结论: 如果一棵树的直径两个端点为\(a,b\),那么树上一个点\(v\)开始的最长路径是\(v\rightarr ...

  9. 微信小程序 — 速学速查笔记

    1. 配置 配置全解析 project.config.json ( 项目配置文件 ) { // 文件描述 "description": "项目配置文件", // ...

  10. 讨厌的adb占用

    adb重启的方法 2018年06月13日 14:59:47 丽闪无敌 阅读数:11969   执行以下命令: D:\android-sdks\platform-tools>adb kill-se ...