LeetCode.1037-有效的回旋镖(Valid Boomerang)
这是小川的第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)的更多相关文章
- 【Leetcode_easy】1037. Valid Boomerang
problem 1037. Valid Boomerang 参考 1. Leetcode_easy_1037. Valid Boomerang; 完
- LeetCode 1037. Valid Boomerang (有效的回旋镖)
题目标签:Math 题目给了我们三个点,让我们判断这三个点是否在一条直线上. 利用斜率 k = (y1 - y0) / (x1 - x0) 来判断,如果 三个点 abc, ab 的斜率 = bc 的斜 ...
- 【LeetCode】1037. Valid Boomerang 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 中学数学题 日期 题目地址:https://leet ...
- 【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 ...
- [LeetCode] Number of Boomerangs 回旋镖的数量
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
- LeetCode 笔记系列八 Longest Valid Parentheses [lich你又想多了]
题目:Given a string containing just the characters '(' and ')', find the length of the longest valid ( ...
- LeetCode 20. 有效的括号(Valid Parentheses)
20. 有效的括号 20. Valid Parentheses 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须 ...
- leetcode第31题--Longest Valid Parentheses
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
- leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题
三星机试也考了类似的题目,只不过是要针对给出的数独修改其中三个错误数字,总过10个测试用例只过了3个与世界500强无缘了 36. Valid Sudoku Determine if a Sudoku ...
随机推荐
- vsftpd 添加用户
方法/步骤 首先要添加一个新的ftp用户并添加访问路径 useradd -d /alidata/www/ace ceshi -d是用户的访问目录 为新添加的ftp用户设置密码 ...
- java 集合数组排序
//数组排序Integer arr[] = {3,4,2};Arrays.sort(arr);//默认升序Arrays.sort(arr,Comparator.reverseOrder());//传一 ...
- 实践:Linux用户、组和密码相关文件被破坏如何恢复系统
我们先看一下用户用户组和密码相关文件: 1 2 3 4 5 6 7 8 9 [root❄centos7 ~]☭ ll /etc/passwd* /etc/shadow* /etc/group* /et ...
- python 单元测试_unittest(七)
一.unittest中各阶段的核心概念:TestCase, TestSuite, 断言函数, TextTestRunner,TestFixture TestCase:所用用例的基类,软件测试中基本的测 ...
- GlusterFS ——分布式卷
GlusterFS概述 全部部署GlusterFS文件系统地址:https://www.cnblogs.com/Mercury-linux/p/12050389.html GlusterFS系统是一个 ...
- 吴恩达+neural-networks-deep-learning+第二周作业
Logistic Regression with a Neural Network mindset v4 简单用logistic实现了猫的识别,logistic可以被看做一个简单的神经网络结构,下面是 ...
- css,scss解决样式:表格的重叠边框
初始效果: 解决方法: 给带有边框的元素设置如下样式margin:0 0 -borderwidth -borderwidth 这里的borderwidth即为边框的宽度,按照上图所示,则添加样式 ma ...
- docker-compose容器互相连接
一些示例未整理 haproxy 与nginx 容器连接 ## 服务的compose 编写 mkdir /mnt/compose vim docker-compose.yml web1: image: ...
- <image>的src属性的使用
刚接触前端不久.怎么用image显示图片是个问题,怎么使用数据流还是base64呢?小小的研究一下 <image src="url"> 1.接口返回数据流,src可以直 ...
- java支持断点续传文件上传和下载组件
java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接 ...