• 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;
    	 }
    }    
    

      

  • 相关阅读:
    public,protected,private辨析
    转载---Java集合对象的深度复制与普通复制
    SSM框架学习之高并发秒杀业务--笔记4-- web层
    PCB布线总的原则
    模拟电子技术目录
    放大器(PA+LAN)在射频上的应用
    AD软件Bug和自我失误的对战
    二、cadence焊盘与封装制作操作步骤详细说明
    图腾柱电路工作原理
    转载:介绍AD另外一种奇葩的多通道复用的方法
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3765082.html
Copyright © 2020-2023  润新知