class Solution {
    public int maxPoints(int[][] points) {
        int count = 0;
        int maxCount = 0;

        if(points.length == 1){
            return 1;
        }

        for(int i = 0; i< points.length-1; i++){
            for(int j =i+1; j< points.length; j++){
                 double[] func = function(points[i],points[j]);
                 for(int k = 0; k<points.length; k++){
                     if(points[k][1] == func[0]* points[k][0] + func[1]){
                         count++;
                     }
                 }
                 if(maxCount < count){
                     maxCount = count;
                 }
                 count = 0;
            }
        }
       return maxCount;
    }

    public static double[] function(int[] point1, int[] point2){
        double[] func = new double[2];
        func[0] = (double)(point2[1] - point1[1]) / (point2[0] - point1[0]);
        func[1] = point1[1] - (double)point1[0] * func[0];
        return func;
    }
}