多个对象求相交问题,多对多难解决,分解为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);
    }
}