首页 > 代码库 > 百度裁减网格纸

百度裁减网格纸

题目描述

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

import java.util.*;
public class Main {
       public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
        int n=sc.nextInt();
        int maxX=Integer.MIN_VALUE;
        int minX=Integer.MAX_VALUE;
        int maxY=Integer.MIN_VALUE;
        int minY=Integer.MAX_VALUE;
        for(int i=0;i<n;i++){
         int x=sc.nextInt() ;
         int y=sc.nextInt();
         maxX=Math.max(x, maxX);
         minX=Math.min(x, minX);
         maxY=Math.max(y, maxY);
         minY=Math.min(y, minY);
        }
        int max=Math.max(maxX-minX,maxY-minY);
        System.out.println(max*max);
         }
       }

 收获:(1)思路:所有的点都减在一个正方形的格子里,所以只要判断所有点的横坐标和纵坐标的最小值和最大值。
比较下横坐标和纵坐标各自最大值和最小值的差,选择差最大的作为正方形的边长即可求得最小的正方形。

(2)int maxX=Integer.MIN_VALUE;
        int minX=Integer.MAX_VALUE;
        int maxY=Integer.MIN_VALUE;
        int minY=Integer.MAX_VALUE;

技术分享

 

 


百度裁减网格纸