给你一条无限长的路,路上有n个行人,每个人有速度和移动方向,求最先碰面的两个行人相遇所需的时间,并分析时间复杂度。
考察说明
考察算法建模与时间复杂度分析能力,能否把物理问题转化为可计算的数学最值问题
回答思路
- 正确区分相向而行和同向而行的情况,理解只有方向相对的行人才会相遇
- 推导出每对相遇时间的公式:相对距离除以相对速度(相向时速度相加)
- 通过枚举所有相向行人对求最小时间,给出O(n^2)暴力解法
- 分析能否优化到O(n log n)或O(n),并说明在什么条件下可优化(如只关心最小时间时用排序或扫描)
- 体现对时间复杂度的正确计算与表达,最好能证明或解释算法正确性