161. Max Points on a Line

原创 2016年08月29日 16:19:02

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

Subscribe to see which companies asked this question。

分别求每个点与其共线的最多点的个数。 要进行两层循环,最外层固定一个点Point[i];然后计算Point[i]与其他点的直线斜率,统计出斜率相同的点的个数,找出最大值,即为与Point[i]共线最多的点的个数。最后计算所有Point[i]中的最大值即为最后的结果。
 注意的地方:
 1.当内层循环与外层循环是同一个点的时候就忽略内层循环对该点的处理;
 2.内层遇到的点与外层选定的点是同一个时;
 3.内层循环遇到的点与外层选定的点在同一竖直线上时.

最后要计算points[i]在同一直线上最大值时这个地方要注意,Max是要与 entry.getValue()+same-1相比较,例子[[1,1],[1,1],[1,1],[4,5],[4,5]]

  /**
	 * 分别求每个点与其共线的最多点的个数。
	 * 要进行两层循环,最外层固定一个点Point[i];
	 * 然后计算Point[i]与其他点的直线斜率,统计出斜率相同的点的个数,找出最大值,即为与Point[i]共线最多的点的个数。
	 * 最后计算所有Point[i]中的最大值即为最后的结果。
	 * 
	 * 注意的地方:
	 * 1.当内层循环与外层循环是同一个点的时候就忽略内层循环对该点的处理;
	 * 2.内层遇到的点与外层选定的点是同一个时;
	 * 3.内层循环遇到的点与外层选定的点在同一竖直线上时.
	 */
	 public int maxPoints(Point[] points) {
		 
		 int len = points.length;
		 /*如果len小于等于2则返回这个len*/
		 if(len <=2){
			 return len;
		 }
		 /*Max定义好准备返回最后的结果*/
		 int Max = 0;
		 /*与points[i]相同的点的个数*/
		 int same = 1;
		 /*HashMap中存的是每个斜率对应的相同点的个数*/
		 HashMap<Double, Integer> countMap = new HashMap<Double, Integer>();
		 
		 for(int i=0;i<len;i++){
			 /*Step1:选定points[i]之后计算该点与其他点的斜率*/
			 countMap.clear();
			 same = 1;
			 for(int j=0;j<len;j++){
				 /*如果是同一个points[i]则忽略*/
				 if(i==j){
					 continue;
				 }
				 /*如果points[j]与points[i]相同,没有办法计算这两个节点的xiel,则same++*/
				 if(points[i].x == points[j].x && points[i].y == points[j].y){
					 same++;
				 }else{
					 /*计算斜率是要注意斜率不存在的情况*/
					 double slope = points[i].x == points[j].x ? Integer.MAX_VALUE:(points[i].y - points[j].y+0.0)/(points[i].x - points[j].x); 
					 int num = 1;
					 if(countMap.containsKey(slope)){
						 num = countMap.get(slope);
					 }
					 num ++;
					 countMap.put(slope, num);
				 }
			 }
			 /*Step2:计算与points[i]在同一条线上的最多点的点的个数*/
			 Max = Max < same ? same : Max;
			 for(Map.Entry<Double, Integer> entry : countMap.entrySet()){
				 if(Max < entry.getValue()+same-1){//这个地方要注意,Max是要与 entry.getValue()+same-1相比较,例子[[1,1],[1,1],[1,1],[4,5],[4,5]]
					 Max = entry.getValue()+same-1;
				 }
			 }
		 }
		 
		 return Max;
	        
	    }


版权声明:本文为博主原创文章,未经博主允许不得转载。

找出穿过最多点的直线 Max Points on a Line

平面上有若干个点,要你找出一条直线,使其能穿过最多的点。 思路:枚举法。求出任意两点之间的线,以直线(斜率,与y轴的交点坐标)的形式存储到map。这样个数最多的直线就是所求。时间O(N^2),空间...

LeetCode 149 — Max Points on a Line(C++ Java Python)

题目:http://oj.leetcode.com/problems/max-points-on-a-line/ Given n points on a 2D plane, find the maxi...

LeetCode:max-points-on-a-line

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

Max Points on a Line

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

LeetCode | Max Points on a Line

/** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; ...

LeetCode - Max Points on a Line

https://leetcode.com/problems/max-points-on-a-line/ 注意,点a, b的斜率和b,c的斜率相同的话,就说明a, b, c在一条线上了。不用再看y = ...

Max Points on a Line (Java)

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line...

149、Max Points on a Line (Hard)

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line...

Leetcode:Max Points on a Line

Max Points on a Line:

LeetCode149. Max Points on a Line

LeetCode149. Max Points on a LineQuestion: Given n points on a 2D plane, find the maximum number of...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:161. Max Points on a Line
举报原因:
原因补充:

(最多只允许输入30个字)