多个对象求相交问题,多对多难解决,分解为1对多问题,相交矩形内部必然存在一点是所有矩形的内部,一开始就想着一个点遍历所有坐标点
事实上,把内部扩展位边上也算内部,这就要考虑两个矩形只有边相交问题了。
只从左下角点取点,通过小于而不等于右上角点就能解决x1[i] <= x && x < x2[i] && y1[i] <= y && y < y2[i]
注意,从左下角点集合取点 与从右上角点集合去点,判断条件不一样。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] x1 = new int[n];
int[] x2 = new int[n];
int[] y1 = new int[n];
int[] y2 = new int[n];
for(int i = 0; i < n; i++){
x1[i] = sc.nextInt();
}
for(int i = 0; i < n; i++){
y1[i] = sc.nextInt();
}
for(int i = 0; i < n; i++){
x2[i] = sc.nextInt();
}
for(int i = 0; i < n; i++){
y2[i] = sc.nextInt();
}
int cnt = 0;
for(int x : x1){
for(int y : y1){
int temp = 0;
for(int i = 0; i < n; i++){
if(x1[i] <= x && x < x2[i] && y1[i] <= y && y < y2[i]){
temp++;
}
}
cnt = Math.max(temp, cnt);
}
}
// for(int x : x2){
// for(int y : y2){
// int temp = 0;
// for(int i = 0; i < n; i++){
//
// if(x1[i] < x && x <= x2[i] && y1[i] < y && y <= y2[i]){
// temp++;
// }
//
// }
// cnt = Math.max(temp, cnt);
// }
// }
System.out.println(cnt);
}
}

京公网安备 11010502036488号