Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
October 8, 2022 06:15 pm GMT

LeetCode - Rectangle Area

Problem statement

Given the coordinates of two rectilinear rectangles in a 2D plane, return the total area covered by the two rectangles.

The first rectangle is defined by its bottom-left corner (ax1, ay1) and its top-right corner (ax2, ay2).

The second rectangle is defined by its bottom-left corner (bx1, by1) and its top-right corner (bx2, by2).

Problem statement taken from: https://leetcode.com/problems/rectangle-area

Example 1:

Container

Input: ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2Output: 45

Example 2:

Input: ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2Output: 16

Constraints:

- -10^4 <= ax1 <= ax2 <= 10^4- -10^4 <= ay1 <= ay2 <= 10^4- -10^4 <= bx1 <= bx2 <= 10^4- -10^4 <= by1 <= by2 <= 10^4

Explanation

The solution to this problem is straightforward. We need to use the school mathematical concept to get the area of two rectangles.

area = Area of rectangle 1 + Area of rectangle 2 - Area of intersecting portion

To calculate the area of intersecting part, we need to compute below four coordinates:

maxCommonX = max(ax1, bx1)maxCommonY = max(ay1, by1)minCommonX = min(ax2, bx2)minCommonY = min(ay2, by2)commonArea = (minCommonX - maxCommonX) * (minCommonY - maxCommonY)

Let's check the algorithm.

// compute the area of rectangles using L * H- set area1 = (ax2 - ax1) * (ay2 - ay1)  set area2 = (bx2 - by1) * (by2 - by1)// if the rectangles do not intersect, return area1 + area2- if bx1 >= ax2 || bx2 <= ax1 || by1 >= ay2 || by2 <= ay1  - return area1 + area2- set maxCommonX = max(ax1, bx1)  set maxCommonY = max(ay1, by1)- set minCommonX = min(ax2, bx2)  set minCommonY = min(ay2, by2)- return area1 + area2 - (minCommonX - maxCommonX) * (minCommonY - maxCommonY);

Let's check our algorithm in C++, Golang, and Javascript.

C++ solution

class Solution {public:    int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {        int area1 = (ax2 - ax1) * (ay2 - ay1);        int area2 = (bx2 - bx1) * (by2 - by1);        if(bx1 >= ax2 || bx2 <= ax1 || by1 >= ay2 || by2 <= ay1) {            return area1 + area2;        }        int maxCommonX = max(ax1, bx1);        int maxCommonY = max(ay1, by1);        int minCommonX = min(ax2, bx2);        int minCommonY = min(ay2, by2);        return area1 + area2 - (minCommonX - maxCommonX) * (minCommonY - maxCommonY);    }};

Golang solution

func computeArea(ax1 int, ay1 int, ax2 int, ay2 int, bx1 int, by1 int, bx2 int, by2 int) int {    area1 := (ax2 - ax1) * (ay2 - ay1)    area2 := (bx2 - bx1) * (by2 - by1)    if bx1 >= ax2 || bx2 <= ax1 || by1 >= ay2 || by2 <= ay1 {        return area1 + area2;    }    maxCommonX := max(ax1, bx1)    maxCommonY := max(ay1, by1)    minCommonX := min(ax2, bx2)    minCommonY := min(ay2, by2)    return area1 + area2 - (minCommonX - maxCommonX) * (minCommonY - maxCommonY)}func max(a, b int) int {    if a > b {        return a    }    return b}func min(a, b int) int {    if a < b {        return a    }    return b}

Javascript solution

var computeArea = function(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {    let area1 = (ax2 - ax1) * (ay2 - ay1);    let area2 = (bx2 - bx1) * (by2 - by1);    if(bx1 >= ax2 || bx2 <= ax1 || by1 >= ay2 || by2 <= ay1) {       return area1 + area2;    }    let maxCommonX = Math.max(ax1, bx1);    let maxCommonY = Math.max(ay1, by1);    let minCommonX = Math.min(ax2, bx2);    let minCommonY = Math.min(ay2, by2);    return area1 + area2 - (minCommonX - maxCommonX) * (minCommonY - maxCommonY) ;};

Let's dry-run our algorithm for Example 1.

Input: ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2Step 1: area1 = (ax2 - ax1) * (ay2 - ay1)              = (3 - -3) * (4 - 0)              = 6 * 4              = 24        area2 = (bx2 - bx1) * (by2 - by1)              = (9 - 0) * (2 - -1)              = 9 * 3              = 27Step 2: if bx1 >= ax2 || bx2 <= ax1 || by1 >= ay2 || by2 <= ay1           0 >= 3 || 9 <= -3 || -1 >= 4 || 2 <= 0           falseStep 3: maxCommonX = max(ax1, bx1)                   = max(-3, 0)                   = 0        maxCommonY = max(ay1, by1)                   = max(0, -1)                   = 0Step 4: minCommonX = min(ax2, bx2)                   = min(3, 9)                   = 3        minCommonY = min(ay2, by2)                   = min(4, 2)                   = 2Step 5: return area1 + area2 - (minCommonX - maxCommonX) * (minCommonY - maxCommonY)               24 + 27 - (3 - 0) * (2 - 0)               51 - 3*2               51 - 6               45We return the answer as 45.

Original Link: https://dev.to/_alkesh26/leetcode-rectangle-area-34ao

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To