public class IntersectionOfTwoSets {
public class Point implements Comparable{
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Object o) {
if(this.x > ((Point)o).x) return 1;
if(this.x < ((Point)o).x) return -1;
if(this.y > ((Point)o).y) return 1;
if(this.y < ((Point)o).y) return -1;
return 0;
}
}
public Point[] intersectionOf(Point[] a, Point[] b) {
List<Point> result = new ArrayList<>();
Arrays.sort(a);
Arrays.sort(b);
for(int i = 0, j = 0; i < a.length && j < b.length; ) {
if(a[i].compareTo(b[j]) == 0) {
result.add(a[i]);
i++;
j++;
} else if (a[i].compareTo(b[j]) < 0) {
i ++;
} else {
j ++;
}
}
return (Point[])result.toArray();
}
给定两个数组 a 和 b,包含 n 个不同的 2D 点。设计一个算法来计算两个数组中包含的点数(难以理解代码)我有多个与此代码相关的问题:
为什么我们要创建嵌套类?
为什么我们在 else if 主体中增加 i 和 j 而不是在 for 语句中增加它们?
main 方法如何创建两个 Point 数组的对象?
(如果有人对这个问题有更好的解决方案,非常感谢。)
慕桂英3389331
相关分类