首页 > 编程知识 正文

高中笔记怎么记(朋友圈 笔记)

时间:2023-05-04 13:21:01 阅读:91970 作者:1115

给出

题目描述

二维平面,求出平面上有n个点,最多有几个点在同一直线上。

示例

输入:

^

|

| o

| o o

| o

| o o

-------------

0 1 2 3 4 5 6输出:

4

写在前面

从本论文解答参考(Ctrl CV ) LeetCode公式问题中求解。

解法:两点同线

想法的转换:找出通过点I的直线,使之通过最多的点。

每个点I,计算该点以后的点和点I的连接线的斜率,用哈希表记录,成为相同斜率时,在计数器上加1。

之所以只考虑现在点之后的点,是因为通过点i-1和点i-2的直线已经在搜索点i-2的过程中被考虑了。

代码

官方这次写的代码有点奇怪,还是我的水平不够? 思考

类解决方案{2}

int点;

铟锡;

HashMapDouble,Integer lines=新HashMapDouble,integer (;

英国石油公司;

公共对集成器、集成_线(整数、整数、整数、整数) {

/*

addalinepassingthroughiandjpoints。

updatemaxnumberofpointsonalinecontainingpointi。

updateanumberofduplicatesofipoint。

*/

//rewrite点作为协调者

int x1=点[ I ] [0];

int y1=点;

int x2=点[ j ] [0];

int y2=点;

//添加复制点

if () y1==y2) ) y1==y2) )

复制;

//Addahorisontalline : y=常数

elseif(y1==y2) {

霍利森塔尔_ Lines=1;

count=math.max (地平线,计数);

}

//添加线: x=斜率* y c

//Onlyslopeisneededforahash-map

//sincewealwaysstartfromthesamepoint

else {2}

双斜率=1.0 * (x1-x2 )/) y1-y2 ) 0.0;

lines.put (斜率,lines.getordefault )斜率,1 ) 1;

count=math.max (线路. get (坡度),计数);

}

返回新支付(计数,重复);

}

公共信息点_在线_连续_点I

/*

计算最大编号为点

适用于线上维修点I。

*/

//initlinespassingthroughpointi

lines.clear (;

霍利森塔尔_ Lines=1;

//onestartswithjustonepointonaline :点。

int计数=1;

//thereisnoduplicatesofapointisofar。

int双工=0;

//computelinespassingthroughpointi (固定) )。

//andpointj (交换)。

//updateinaloopthenumberofpointsonaline

//andthenumberofduplicatesofpointi。

for(intj=I1; j-n; j ) {2}

配对整合器,整合器=添加_线(I,j,计数,复制);

count=p.getKey (;

duplicates=p.getValue (;

}

返回计数复制;

}

publicintmaxpoints (int点)

this.points=points;

//ifthenumberofpointsislessthan 3

//they are all on the same line (除此之外,其他所有线路都是这样)。

n=点长度;

是if(n3)

返回n;

int max_count=1;

//computeinaloopamaxnumberofpoints

//在线容器点I。

for (英制=0; I-1; I ) )

max _ count=math.max (最大点在线连接点(I ),最大计数);

返回最大计数;

}

}

作者: leet代码

链接: https://leet代码- cn.com /问题/a线上最大点/解决方案/zhi-shan-zui -双核- Didie

资料来源:力量按钮(leet代码)。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。