JAVA程序设计:直线上最多的点数(LeetCode:149)

给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

示例 1:

输入: [[1,1],[2,2],[3,3]]
输出: 3
解释:
^
|
|        o
|     o
|  o  
+------------->
0  1  2  3  4
示例 2:

输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出: 4
解释:
^
|
|  o
|     o        o
|        o
|  o        o
+------------------->
0  1  2  3  4  5  6

 

思路:题目思路很简单,但是最后一组测试数据的精度卡的我怀疑人生,我们通过枚举法暴力枚举节点i,使得当前所有直线必须经过点i,然后在所有经过点i的直线上找到有最多点的直线,对于每一个直线我们用hash存一下上面的点数,这样我们可以少一层循环。

import java.awt.Paint;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;
import java.util.Set;
import java.util.Stack;
import java.util.TreeSet;
       
class Solution {
	
	int[][] points;
	int n,horisontal_lines;
	HashMaplines=new HashMap();
	
    public int maxPoints(int[][] points) {   
    	this.points=points;
    	n=points.length;
    	if(n<3) return n;
    	
    	int max_count=1;
    	for(int i=0;i

 

你可能感兴趣的:(JAVA程序设计:直线上最多的点数(LeetCode:149))