笔试面试题目:正方形的判断

本文介绍了一道腾讯笔试题,要求判断给定的四个点是否能组成正方形。通过选取最长的两条线段作为对角线,检查其余四条线段是否相等来确定。提供了一个使用Go语言实现的解决方案,并在LeetCode上验证了正确性。文章强调了面对难题时保持冷静和逻辑分析的重要性。
摘要由CSDN通过智能技术生成

一. 缘来缘起

拳不离手,曲不离口。周末了,来活跃一下思路,保持对代码的敏感。我们来看一道有趣的腾讯笔试题目:

在平面内,随意给定4个点,如何判断他们能否组成一个正方形(为简便起见,假设这些点的坐标都是整数)。

图片

这个问题,任何初中毕业的学生,基本都能看懂题目,且很容易想出如下4种判定方法:

  • 矩形 + 邻边相等

  • 矩形 + 对角线垂直

  • 菱形 + 邻边垂直

  • 菱形 + 对角线相等

二. 编程实现

思考一下,究竟采用哪种判定方式呢?由于4个点的顺序不固定,所以很难确定什么叫"邻边"和"垂直",所以,选择的方式是:

菱形 + 对角线相等

图片

那么,有的朋友会说,4个点的顺序无法确定,对角线也无法确定啊。其实不然,我们可以求出最长的2条,把它们看作对角线。

接下来,思路就清晰了:4个点,形成6条线段,把最长的2条看作对角线,把剩余的4条看成边,然后,仅依赖长度关系就可以了。

所以,算法是:4条短线段相等(菱形),2条长线段相等,必定是正方形,问题完美解决了。我们来看看代码的实现和leetcode自测。

import "sort"
func validSquare(p1 []int, p2 []int, p3 []int, p4 []int) bool {    var a []int    a = append(a, distanceSqare(p1, p2))    a = append(a, distanceSqare(p1, p3))    a = append(a, distanceSqare(p1, p4))    a = append(a, distanceSqare(p2, p3))    a = append(a, distanceSqare(p2, p4))    a = append(a, distanceSqare(p3, p4))
    sort.Ints(a)
    if a[0] == a[1] && a[1] == a[2] && a[2] == a[3] && a[4] == a[5] && a[0] > 0 && a[0] < a[4] {        return true    }
    return false}
func square(x int) int {    return x * x}
func distanceSqare(p []int, q []int) int {    return square(p[0] - q[0]) + square(p[1] - q[1])}

在leetcode上进行了测试,OK.

三. 最后的话

腾讯的这道笔试题目,看似简单,但要在短时间内想出合理的优雅解法,也不太容易。

笔试面试中,遇到难题后,不要慌,相信自己的逻辑分析和判断,没什么大不了的。

祝大家笔试面试顺利,拿到更好offer,钱多多,福利多多,也欢迎大家一起刷起来。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值