LeetCode题练习与总结:矩形面积--223

一、题目描述

给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。

每个矩形由其 左下 顶点和 右上 顶点坐标表示:

  • 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。
  • 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。

示例 1:

输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2
输出:45

示例 2:

输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2
输出:16

提示:

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

二、解题思路

  1. 首先计算两个矩形各自的面积。对于任何一个矩形,其面积可以通过计算长和宽的乘积得到,其中长为右上顶点的x坐标减去左下顶点的x坐标,宽为右上顶点的y坐标减去左下顶点的y坐标。

  2. 然后计算两个矩形的重叠面积。两个矩形重叠的部分也是矩形,其左下顶点的坐标为两个矩形左下顶点坐标的x和y坐标中的较大值,右上顶点的坐标为两个矩形右上顶点坐标的x和y坐标中的较小值。重叠矩形的面积可以通过计算长和宽的乘积得到,但需要确保长和宽都大于0,否则重叠面积为0。

  3. 最后,将两个矩形的面积相加,再减去重叠部分的面积,即可得到两个矩形覆盖的总面积。

三、具体代码

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);// 计算两个矩形重叠部分的坐标int overlapX1 = Math.max(ax1, bx1);int overlapY1 = Math.max(ay1, by1);int overlapX2 = Math.min(ax2, bx2);int overlapY2 = Math.min(ay2, by2);// 计算重叠部分的面积int overlapArea = 0;if (overlapX2 > overlapX1 && overlapY2 > overlapY1) {overlapArea = (overlapX2 - overlapX1) * (overlapY2 - overlapY1);}// 计算总面积return area1 + area2 - overlapArea;}
}

这段代码首先计算了两个矩形各自的面积,然后确定了重叠矩形的坐标,并计算了重叠面积,最后返回了两个矩形覆盖的总面积。

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 计算第一个矩形的面积:O(1)(常数时间)
  • 计算第二个矩形的面积:O(1)(常数时间)
  • 计算重叠矩形的坐标:每个坐标计算使用了Math.max和Math.min,这两个操作都是O(1)(常数时间)
  • 计算重叠矩形的面积:O(1)(常数时间,只有一行判断和计算)
  • 计算总面积:O(1)(常数时间)

由于上述所有操作都是常数时间的操作,且没有循环或递归结构,因此整个函数的时间复杂度为O(1),即常数时间复杂度。

2. 空间复杂度
  • 整个函数只使用了固定数量的变量(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2, area1, area2, overlapX1, overlapY1, overlapX2, overlapY2, overlapArea),这些变量占用的空间不会随着输入数据的大小而改变。
  • 没有使用额外的数据结构,如数组、列表或哈希表。

因此,整个函数的空间复杂度为O(1),即常数空间复杂度。

五、总结知识点

  • 基本算术运算

    • 加法(+)、减法(-)、乘法(*):用于计算矩形的面积和重叠部分的面积。
  • Java基本数据类型

    • int:用于定义整数类型的变量,存储矩形坐标和面积。
  • Java Math类

    • Math.max(int a, int b):返回两个整数中的较大值。
    • Math.min(int a, int b):返回两个整数中的较小值。
  • 条件语句

    • if 语句:用于检查重叠矩形是否存在(即重叠矩形的宽度和高度是否大于0)。
  • 函数定义

    • public 关键字:定义访问权限,表示方法可以被任何其他类访问。
    • int:指定函数返回类型,这里返回一个整数类型的面积。
    • 方法名 computeArea:遵循Java命名习惯,使用驼峰命名法。
    • 参数列表:方法接受8个整数类型的参数,代表两个矩形的坐标。
  • 逻辑思维

    • 分析问题并确定解决方案的逻辑步骤,例如先计算两个矩形的面积,再计算重叠面积,最后计算总面积。
  • 空间坐标理解

    • 理解二维平面上的矩形坐标表示,包括左下角和右上角的坐标。
  • 几何知识

    • 矩形的面积计算公式:长乘以宽。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置 MinGW 以及使用 g++ 编译 C++ 程序

如何在 Windows 上安装和配置 MinGW 以及使用 g 编译 C 程序 (C语言&#xff08;gcc&#xff09;类似 ) 在Windows环境下&#xff0c;使用C进行编程需要一个编译器&#xff0c;而MinGW (Minimalist GNU for Windows) 是一个常用的C/C编译器工具集。对于编程新手来说&#xff0c…

SOMEIP_ETS_101: SD_ClientServiceActivate_send_StopOfferService

测试目的&#xff1a; 验证当DUT在客户端模式下开始发送FindService消息时&#xff0c;测试器发送StopOfferService后&#xff0c;DUT能够理解其正在寻找的服务和实例ID不再可用&#xff0c;并停止为此服务和实例ID发送FindService消息。同时&#xff0c;DUT仍然可以发送Find-…

云曦2024秋季开学考

ezezssrf 第一关&#xff1a;md5弱比较 yunxi%5B%5D1&wlgf%5B%5D2 第二关&#xff1a; md5强比较 需要在bp中传参&#xff0c;在hackbar里不行 yunxiiM%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DC V%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_B…

【HarmonyOS NEXT】实现网络图片保存到手机相册

【问题描述】 给定一个网络图片的地址&#xff0c;实现将图片保存到手机相册 【API】 phAccessHelper.showAssetsCreationDialog【官方文档】 https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-photoaccesshelper-V5#showassetscreationdialog…

降维打击 华为赢麻了

文&#xff5c;琥珀食酒社 作者 | 积溪 真是赢麻了 华为估计都懵了 这辈子还能打这么富裕的仗&#xff1f; 其实在苹果和华为的发布会召开之前 我就知道华为肯定会赢 但我没想到 苹果会这么拉胯 华为这是妥妥的降维打击啊 就说这苹果iPhone 16吧 屏幕是变大了、颜色…

编译安装调试 scaLapack 和 openmpi 以及 lapack

编译安装调试 scaLapack /home/hipper/ex_scalapack/ mkdir ./lapack mkdir -p ./lapack/local/lib mkdir ./openmpi mkdir ./scalapack 1&#xff0c;编译安装 Lapack 下载代码&#xff1a; cd lapack wget https://github.com/Reference-LAPACK/lapack/archive/refs/tags/…

Python | Leetcode Python题解之第398题随机数索引

题目&#xff1a; 题解&#xff1a; class Solution:def __init__(self, nums: List[int]):self.nums numsdef pick(self, target: int) -> int:ans cnt 0for i, num in enumerate(self.nums):if num target:cnt 1 # 第 cnt 次遇到 targetif randrange(cnt) 0:ans …

智能头盔语音识别声控芯片,AI离线语音识别ic方案,NRK3301

头盔是交通事故中保护电动车车主安全的最后一道屏障。为了增加骑行用户的安全保护&#xff0c;改善骑行用户的出行体验&#xff0c;让用户从被动使用头盔到主动佩戴头盔&#xff0c;头盔厂家与九芯电子合作&#xff0c;推出了语音智能头盔&#xff0c;它具备首家骑行专用的智能…

【网络安全】-xss跨站脚本攻击实战-xss-labs(1~10)

Level1: 检查页面源代码&#xff1a; function函数&#xff1a; (function(){try{let tn ;if(tn.includes(oem)){Object.defineProperty(document, referrer, {get: function(){return ;}});}else if(tn.includes(hao_pg)){if(!document.referrer.match(tn)){Object.definePro…

【python】python 安装和 pycharm 安装

1 python 安装 1.1 下载 下载地址&#xff1a;python 官网 1.2 安装 windows 安装为例。 双击.exe文件打开 安装界面 安装完成 1.3 检查安装是否成功 win/start 键r 键 运行窗口输入 cmd 回车 3 输入 python查看 显示版本信息&#xff0c;表示已经安装成功。 …

协议头,wireshark,http

目录 协议头 ip头 udp头 mac层 网络工具 telnet wireshark Http 一、HTTP 协议介绍 二、HTTP 协议的工作过程 三、使用抓包工具抓取报文 四、获取到http请求报文&#xff1a; 五、http请求&#xff08;request&#xff09; &#xff08;一&#xff09;、认识URL 项…

如果 Android 手机出现数据丢失,如何在Android上恢复丢失的数据

当您的 Android 手机发生数据丢失时&#xff0c;您可能需要检索丢失的文件。为了帮助您完成此过程&#xff0c;以下是执行 Android 数据恢复的一些有效方法&#xff1a; 如何在Android上检索数据 如果您的 Android 手机出现数据丢失&#xff0c;您可能需要检索丢失的文件。为了…

OpenWRT有三个地方设置DNS,究竟设置哪个地方会更好?

前言 刚上手OpenWRT软路由系统的小伙伴或许都会有这样的疑问&#xff1a;OpenWRT这个系统有三个地方是设置DNS的&#xff0c;究竟设置哪一个才是正确的&#xff1f; 这个还得从实际应用说起。 一般来说&#xff0c;咱们在使用路由器的时候&#xff0c;DNS都是默认运营商的DN…

计算机毕业设计选题推荐-自驾游攻略管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

CentOs7 解决yum更新源报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。

CentOs7 解决yum更新源报错&#xff1a;[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。 前言问题解决方法&#xff1a; 前言 遇到这个问题大概率是镜像源的问题可以参照这篇文章的内容试一下 镜像源问题相关解决方法 根据自己的情况对症下药&#xff0c;如果还不…

LAMP环境下项目部署

目录 1、创建一台虚拟机 centos 源的配置 备份源 修改源 重新加载缓存 安装软件 2、关闭防火墙和selinux 查看防火墙状态 关闭防火墙 查看SELinux的状态 临时关闭防火墙 永久关闭SELinux&#xff1a;编辑SELinux的配置文件 配置文件的修改内容 3、检查系统中是否…

计算机毕业设计 家校互联管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

单片机-STM32 看门狗(八)

目录 一、看门狗概念 1、定义&#xff1a; 二、单片机中的看门狗 1、功能描述&#xff1a; 2、看门狗设置部分 预分频寄存器(IWDG_PR) 3、窗口看门狗 特性&#xff1a; 4、看门狗配置&#xff1a; 一、看门狗概念 看门狗--定时器&#xff08;不属于基本定时器、通用定…

svg图标的使用

图片的格式有很多&#xff0c;前端经常使用的有以下类型:jpg,jpeg,png,gif,svg,这篇文章将简单svg的情况&#xff0c;以及项目中如何使用和配置svg图标 目录 什么是svg图标 SVG图标的优缺点 优点 缺点 svg前端使用场景 SVG在代码中的使用 简单使用创建svg 作为图标引入…

udp网络通信 socket

套接字是实现进程间通信的编程。IP可以标定主机在全网的唯一性&#xff0c;端口可以标定进程在主机的唯一性&#xff0c;那么socket通过IP端口号就可以让两个在全网唯一标定的进程进行通信。 套接字有三种&#xff1a; 域间套接字&#xff1a;实现主机内部的进程通信的编程 …