持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
力扣1037. 有效的回旋镖
一、题目描述:
给定一个数组 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
来源:力扣(LeetCode) 链接:leetcode.cn/problems/va… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
-
这道题考察了什么思想?你的思路是什么?
回旋镖 定义为一组三个点,这些点 各不相同 且 不在一条直线上 。
若三点共线,则任意组成的两个向量叉乘为0;
所以,我们只需要计算两个向量的叉乘即可。
-
做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?
是一次通过的啊,这种题目是数学问题,编程上没什么难度!
-
有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?
func isBoomerang(points [][]int) bool {
x1, y1 := points[0][0], points[0][1]
x2, y2 := points[1][0], points[1][1]
x3, y3 := points[2][0], points[2][1]
return (y2-y1)*(x3-x2) != (y3-y2)*(x2-x1)
}
作者:lcbin
链接:https://leetcode.cn/problems/valid-boomerang/solution/by-lcbin-t8uz/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
三、AC 代码:
func isBoomerang(points [][]int) bool {
v1 := [2]int{points[1][0] - points[0][0], points[1][1] - points[0][1]}
v2 := [2]int{points[2][0] - points[0][0], points[2][1] - points[0][1]}
return v1[0]*v2[1]-v1[1]*v2[0] != 0
}
四、总结:
如果你还有更多的思考、分析、总结,通通都加上来吧~
这是2022年6月8日的每日一题,1037. 有效的回旋镖。
数学知识也要多了解一下,本题主要是考察数学知识。加油,奥里给!
相似题目
有一道本题的进阶题
- 2280. 表示一个折线图的最少线段数 (第 294 场周赛 T3)