По заданным n точкам на двумерной плоскости найдите максимальное количество точек, лежащих на одной прямой

Ниже приведено решение, которое я пытаюсь реализовать.

/**
 * Definition for a point.
 * class Point {
 *     int x;
 *     int y;
 *     Point() { x = 0; y = 0; }
 *     Point(int a, int b) { x = a; y = b; }
 * }
 */
 public class Solution {
    public int maxPoints(Point[] points) {
    int max=0;
    if(points.length==1)
        return 1;
     for(int i=0;i<points.length;i++){
         for(int j=0;j<points.length;j++){
         if((points[i].x!=points[j].x)||(points[i].y!=points[j].y)){
         int coll=get_collinear(points[i].x,points[i].y,points[j].x,points[j].y,points);
                  if(coll>max)
                    max=coll;
                }
                else{

                    **Case where I am suffering**

                }
           }
        }
  return max;
}
public int get_collinear(int x1,int y1,int x2, int y2,Point[] points)
{
    int c=0;
    for(int i=0;i<points.length;i++){
        int k1=x1-points[i].x;
        int l1=y1-points[i].y;
        int k2=x2-points[i].x;
        int l2=y2-points[i].y;
        if((k1*l2-k2*l1)==0)
            c++;
    }
    return c;
}
}

Это бежит в O (n ^ 3). В основном я делаю два цикла, сравнивая различные точки на 2-й плоскости. И затем, взяв 2 точки, я отправляю эти 2 точки в метод get_collinear, который попадает в линию, образованную этими 2 точками, со всеми элементами массива, чтобы проверить, коллинеарны ли 3 точки. Я знаю, что это метод грубой силы. Однако в случае, когда ввод [(0,0), (0,0)] мой результат не удается. В цикле else я должен добавить условие, чтобы выяснить такие случаи. Может кто-нибудь помочь мне с решением этого. И существует ли лучшее решение этой проблемы в лучшее время выполнения. Я не могу думать ни о чем.

Ответы на вопрос(1)

Ваш ответ на вопрос