Leetcode刷题java之391( 完美矩形)

执行结果:

通过

显示详情

添加备注

执行用时:153 ms, 在所有 Java 提交中击败了5.10%的用户

内存消耗:46.6 MB, 在所有 Java 提交中击败了87.84%的用户

通过测试用例:47 / 47

class Solution {

    public boolean isRectangleCover(int[][] rectangles) {

        long area = 0;

        int minX = rectangles[0][0], minY = rectangles[0][1], maxX = rectangles[0][2], maxY = rectangles[0][3];

        Map<Point, Integer> cnt = new HashMap<Point, Integer>();

        for (int[] rect : rectangles) {

            int x = rect[0], y = rect[1], a = rect[2], b = rect[3];

            area += (long) (a - x) * (b - y);

            minX = Math.min(minX, x);

            minY = Math.min(minY, y);

            maxX = Math.max(maxX, a);

            maxY = Math.max(maxY, b);

            Point point1 = new Point(x, y);

            Point point2 = new Point(x, b);

            Point point3 = new Point(a, y);

            Point point4 = new Point(a, b);

            cnt.put(point1, cnt.getOrDefault(point1, 0) + 1);

            cnt.put(point2, cnt.getOrDefault(point2, 0) + 1);

            cnt.put(point3, cnt.getOrDefault(point3, 0) + 1);

            cnt.put(point4, cnt.getOrDefault(point4, 0) + 1);

        }

        Point pointMinMin = new Point(minX, minY);

        Point pointMinMax = new Point(minX, maxY);

        Point pointMaxMin = new Point(maxX, minY);

        Point pointMaxMax = new Point(maxX, maxY);

        if (area != (long) (maxX - minX) * (maxY - minY) || cnt.getOrDefault(pointMinMin, 0) != 1 || cnt.getOrDefault(pointMinMax, 0) != 1 || cnt.getOrDefault(pointMaxMin, 0) != 1 || cnt.getOrDefault(pointMaxMax, 0) != 1) {

            return false;

        }

        cnt.remove(pointMinMin);

        cnt.remove(pointMinMax);

        cnt.remove(pointMaxMin);

        cnt.remove(pointMaxMax);

        for (Map.Entry<Point, Integer> entry : cnt.entrySet()) {

            int value = entry.getValue();

            if (value != 2 && value != 4) {

                return false;

            }

        }

        return true;

    }

}

class Point {

    int x;

    int y;

    public Point(int x, int y) {

        this.x = x;

        this.y = y;

    }

    @Override

    public int hashCode() {

        return x + y;

    }

    @Override

    public boolean equals(Object obj) {

        if (obj instanceof Point) {

            Point point2 = (Point) obj;

            return this.x == point2.x && this.y == point2.y;

        }

        return false;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值