几何学是数学的一个分支,关注与空间相关的属性,如距离、形状、大小以及图形的相对位置。高级几何(例如三维几何)大多数计算机科学课程中不会教授,因此可以预期在算法面试中只会问到二维几何问题。

在算法面试中,几何通常不是问题的重点(毕竟你也不是在评估数学能力)。你通常需要在问题中使用其他算法和/或数据结构。

边缘情况

  • 零值。这总是会让人困惑。

技巧

两点之间的距离

比较两点之间的距离时,使用dx² + dy²就足够了。无需对值取平方根。示例:K个最近点到原点

重叠圆

要判断两个圆是否重叠,请检查两圆的圆心之间的距离小于它们的半径之和。

重叠矩形

如果以下条件为真,则两个矩形重叠:

overlap = rect_a.left < rect_b.right and \
  rect_a.right > rect_b.left and \
  rect_a.top > rect_b.bottom and \
  rect_a.bottom < rect_b.top

这里有一个很好的可视化。示例:矩形重叠

样本问题

  • 你有一张有很多矩形的平面,找出其中有多少个相交。
  • 你会使用哪种数据结构来查询二维平面上一组点的k个最近点?
  • 给定许多点,找出离原点最近的k个点。
  • 你如何三角剖分一个多边形?

基本问题

如果你正在为这个主题学习,这是需要练习的基本问题。

推荐的练习问题

在你已经为这个主题学习和练习了基本问题之后,这是推荐的练习问题。

推荐的课程

import AlgorithmCourses from '../_courses/AlgorithmCourses.md'