解题思路
- 重复的点没有必要去增加时间复杂度,
先把point点简化成没有重复的新数组norepeatvalues以及记录每个新数组的成员point对应的重复次数repeatcounts数组; - 两个点可以确定一条直线,假设有一个起始点Point[i]和Point[j],它们俩相连的斜率为k,其它只要和它们相连的点必定与它们在同一条直线上;当然,斜率不存在的极端情况也是要考虑在内的,斜率不存在的点,它们点X坐标必定一样;
- 由于norepeatvalues的长度和对应的点重复的个数数组repeatcounts长度不定,所以采用ArrayList数组;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static class Point {
int x;
int y;
Point(int a, int b) {
x = a;
y = b;
}
}
public static int maxPoints(Point[] points) {
// Write your code here
if (points == null) {
return 0;
}
int maxcount = 0;