题目描述

度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。 
输入描述:
第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi(-1e9<=xi,yi<=1e9)表示网格上的点
输出描述:
一行输出最小面积
输入例子:
2
0 0
0 3
输出例子:
9
解题

第一反应求任意了点横纵坐标差的绝对值的最大值,时间复杂度O(N*N)
这样应该不好,然后考虑到这一的正方形其作用的点在左上 和 右下,只有这两个点起作用,左上最小点 则右下就是最大点,这样只要线性时间就可以了。
有一点要说明下,下面对 横坐标 和纵坐标 的最值 是分开计算的,由于x的最小可能对于y的最大,两者相对独立的
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int n = in.nextInt();
            int minX = in.nextInt();
            int minY = in.nextInt();
            int maxX = minX;
            int maxY = minY;
            for(int i = 0;i<n-1;i++){
                int x = in.nextInt();
                int y = in.nextInt();
                minX = Math.min(minX,x);
                minY = Math.min(minY,y);
                maxX = Math.max(maxX,x);
                maxY = Math.max(maxY,y);
            }
            int d1 = Math.abs(maxX - minX);
            int d2 = Math.abs(maxY - minY);
            int d = Math.max(d1,d2);
            System.out.println(d*d);
        }
    }
}