面试题 16.14. 最佳直线

本文介绍了一种改进的算法,用于寻找二维平面上通过最多点的直线,避免了原始暴力法的O(n^3)复杂度,通过向量和三点共线原理提升效率。实例演示和优化策略揭示了如何在给定点列表中找到穿过的点数最多的直线,并按指定规则返回其编号。
摘要由CSDN通过智能技术生成

题目

给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]。请找出一条直线,其通过的点的数目最多。

设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S,你仅需返回[S[0],S[1]]作为答案,若有多条直线穿过了相同数量的点,则选择S[0]值较小的直线返回,S[0]相同则选择S[1]值较小的直线返回。

示例:

输入: [[0,0],[1,1],[1,0],[2,0]]
输出: [0,2]
解释: 所求直线穿过的3个点的编号为[0,2,3]

此题大意就是找到一条直线,使得穿过平面上的点数最多
分析: 暴力法,任意两个点确定一条直线,因此,列举出所有的直线,遍历剩下的通过的点数并进行统计,为了避免求解直线方程,可以充分利用三点共线原理,通过向量求解。暴力法时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值