zoukankan      html  css  js  c++  java
  • 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.

    public class Solution {
    	/**
    	 * This program is used to calculate the number of points on a line on a plane.
    	 * The algorithm is simple if there is no doubt on the definition of a line.
    	 * A line can be defined using a single point and slope, one can obtain the analytic expression.
    	 * So, the algorithm in the program is the following:
    	 * 1. For a fixed point, calculate the maximum number of points on the same line with the 
    	 * fixed point.
    	 * 2. run a loop with respect to each point.
    	 * 
    	 * @param points -- an array of points on plane
    	 * @return maximum number of points on a line
    	 * @author Averill Zheng
    	 * @version 2014-06-01
    	 * @since JDK 1.7
    	 */
    	 public int maxPoints(Point[] points) {
    		 int numberOfPoints = 0;
    		 int length = points.length;
    		 for(int i = 0; i < length; ++i){
    			 int max = maxPointsForFixedInterception(i, points);
    			 numberOfPoints = (numberOfPoints < max) ? max : numberOfPoints;
    		 }
    		 return numberOfPoints;
    	 }
    	 
    	 private int maxPointsForFixedInterception(int i, Point[] points){
    		 int max = 0, length = points.length;
    		 Map<Double, Integer> slope = new HashMap<Double, Integer>();
    		 
    		 if(length > 0){
    			 max = 1;
    			 if(length > 1){				
    				 //on vertical line
    				 int number = 1;
    				 for(int j = 0; j < length; ++j){
    					 if(j != i){
    						 double x_coor = points[j].x - points[i].x;
    						 double y_coor = points[j].y - points[i].y;
    						 //on vertical-line
    						 if(x_coor == 0 && y_coor != 0){
    							 ++number;
    							 max = (max < number)? number : max;
    						 }
    						 //repeat points
    						 else if(x_coor == 0 && y_coor == 0){
    							 ++max;
    						 }
    						 else{
    							 double slopeValue = y_coor / x_coor;
    							 if(slope.containsKey(slopeValue)){
    								 int num = slope.get(slopeValue) + 1;
    								 max = (max < num) ? num : max;
    								 slope.put(slopeValue, num);
    							 }
    							 else{
    								 max = (max < 2) ? 2 : max;
    								 slope.put(slopeValue, 2);
    							 }
    						 }
    					 }
    				 }
    			 }
    		 }
    		 return max;
    	 }
    }    
    

      

  • 相关阅读:
    kafka 控制台命令
    VMware centos7 如何配置静态ip并且可上网
    kafka学习-坑篇
    IDEA中Git的更新、提交、还原方法
    深入理解Java的接口和抽象类
    java动态代理实现与原理详细分析
    注解 @EnableFeignClients 工作原理
    com.mysql.cj.jdbc.Driver 新特性jdbc.url连接供参考
    插入数据库中文乱码
    logback配置文件
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3765082.html
Copyright © 2011-2022 走看看