zoukankan      html  css  js  c++  java
  • 2016百度编程题:裁减网格纸

    题目描述

    度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数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);
            }
        }
    }
  • 相关阅读:
    css自适应宽高等腰梯形
    控制台屏蔽某console的输出
    js定时器的时间最小值-setTimeout、setInterval
    03_数字的字面量
    程序员-表情包
    程序员-趣图集
    js不是从上到下执行的吗?
    CSS样式重置
    系统程序名命令表
    js手风琴图片切换实现原理及函数分析
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5306908.html
Copyright © 2011-2022 走看看