程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Max Points on a Line

Max Points on a Line

編輯:C++入門知識

題目原型:

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

基本思路:

題目的意思就是找到一條直線,讓最多的點在這條直線上,那麼利用數學中的斜率定義,如果兩個點與另外一個的斜率相等,那麼這兩個點與另外一個點在同一條直線上。

下面用到求最大公約數,注意:一個正數和一個負數求最大公約數是沒意義的。

	//通過斜率相等來求
	public int maxPoints(Point[] points)
	{
		int maxSum = 0;
		if(points==null||points.length==0)
			return 0;
		//如果只有一個點時
		if(points.length==1)
			return 1;
		//以一個點為基點,分別求出其余點與這個點之間斜率
		for(int i = 0;i map = new HashMap();
			int maxSumtmp = 0;
			for(int j = 0;jmap.get(str)?maxSumtmp:map.get(str);
			}
			maxSum = Math.max(maxSumtmp+1+samePoint, maxSum);
		}
		
		return maxSum;
	}
	
	//最大公約數,如果最大公約數為0 ,說明這兩個數為均為0
	public int gcd(int a , int b)
	{
		return a==0?b:gcd(b%a, a);
	}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved