max-points-on-a-line 同一条线上的最多点

题目:

对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

示例:

输入:[(0,0),(0,1)]        输出:2

输入:[(2,3),(3,3),(-5,3)]     输出:3

代码:

复制代码
 1 /**
 2  * struct Point {
 3  *    int x;
 4  *    int y;
 5  * };
 6  */
 7 
 8 class Solution {
 9 public:
10     /**
11      * 
12      * @param points Point类vector 
13      * @return int整型
14      */
15     int maxPoints(vector<Point>& points) {
16         int length = points.size(), count = 2;
17         if(length < 2) return length;
18         
19         for(int i = 0; i < length - 1; i ++){
20             
21             for(int k = i + 1; k < length - 1; k ++){
22                 int site_x = points[i].x - points[k].x;
23                 int site_y = points[i].y - points[k].y;
24                 int temp = 0;
25                 if(site_x == 0 && site_y == 0)
26                     continue;
27                 for(int j = 0; j < length; j ++){
28                     if( !site_x && points[i].x == points[j].x)
29                         temp ++;
30                     else if( !site_y && points[i].y == points[j].y )
31                         temp ++;
32                     else if( ( points[i].x - points[j].x )*site_y == (points[i].y - points[j].y)*site_x )
33                         temp ++;
34                 }
35                 count = max(count,temp);
36             }
37         }
38         return count;
39     }
40 };
复制代码

我的笔记:

  利用穷举的方法,将数组中所有的点,进行两两匹配,并求出利用site_x / site_y 得到的斜率(不直接用除法是因为在除法中会出现除不尽的情况,所以这里用site_x 和 site_y来代替)。

posted @   John_yan15  阅读(173)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示