力扣热门算法题 217. 存在重复元素,223. 矩形面积,225. 用队列实现栈

217. 存在重复元素,223. 矩形面积,225. 用队列实现栈,每题做详细思路梳理,配套Python&Java双语代码, 2024.04.01 可通过leetcode所有测试用例。

目录

217. 存在重复元素

解题思路

完整代码

Java

Python

223. 矩形面积

解题思路

完整代码

Java

Python

225. 用队列实现栈

解题思路

完整代码

Java

Python


217. 存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

示例 1:

输入:nums = [1,2,3,1]
输出:true

示例 2:

输入:nums = [1,2,3,4]
输出:false

示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

解题思路

        我们可以遍历数组,将元素添加到一个集合中。在添加之前,我们检查该元素是否已经存在于集合中。如果存在,说明数组中有重复元素,返回 true;否则,继续添加元素。如果遍历结束都没有发现重复元素,返回 false

  1. 初始化一个空集合
  2. 遍历数组:对于每个元素,检查它是否已经在集合中。
    • 如果已存在,立即返回 true
    • 如果不存在,将其添加到集合中。
  3. 如果遍历完成没有返回 true,说明没有发现重复元素,返回 false

完整代码

Java
class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> seen = new HashSet<>();
        for (int num : nums) {
            if (seen.contains(num)) {
                return true;
            }
            seen.add(num);
        }
        return false;
    }

}
Python
class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        seen = set()
        for num in nums:
            if num in seen:
                return True
            seen.add(num)
        return False

223. 矩形面积

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

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

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

示例 1:

Rectangle Area

输入: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

解题思路

  1. 计算每个矩形的面积

    • 矩形1的面积:(ax2 - ax1) * (ay2 - ay1)
    • 矩形2的面积:(bx2 - bx1) * (by2 - by1)
  2. 计算重叠部分的面积

    • 首先,我们需要找出重叠部分的左下角和右上角的坐标。
    • 重叠部分的左下角坐标为 (max(ax1, bx1), max(ay1, by1))
    • 重叠部分的右上角坐标为 (min(ax2, bx2), min(ay2, by2))
    • 如果两个矩形有重叠部分,那么重叠部分的宽度为 min(ax2, bx2) - max(ax1, bx1),高度为 min(ay2, by2) - max(ay1, by1)
    • 如果重叠部分的宽度或高度为负数,说明两个矩形没有重叠部分,此时重叠部分的面积为0。
  3. 计算总面积

    • 总面积 = 矩形1的面积 + 矩形2的面积 - 重叠部分的面积。

完整代码

Java
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 overlapWidth = Math.min(ax2, bx2) - Math.max(ax1, bx1);
        int overlapHeight = Math.min(ay2, by2) - Math.max(ay1, by1);

        // 计算重叠部分的面积,如果没有重叠部分,则面积为0
        int overlapArea = Math.max(0, overlapWidth) * Math.max(0, overlapHeight);

        // 计算总面积
        return area1 + area2 - overlapArea;
    }

}
Python
class Solution:
    def computeArea(self, 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)

        # 计算重叠部分的坐标
        overlapWidth = min(ax2, bx2) - max(ax1, bx1)
        overlapHeight = min(ay2, by2) - max(ay1, by1)

        # 计算重叠部分的面积,如果没有重叠部分,则面积为0
        overlapArea = max(0, overlapWidth) * max(0, overlapHeight)

        # 计算总面积
        return area1 + area2 - overlapArea

225. 用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

注意:

  • 你只能使用队列的标准操作 —— 也就是 push to backpeek/pop from frontsize 和 is empty 这些操作。
  • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例:

输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]

解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

解题思路

  1. 初始化:创建两个队列,queue1queue2

  2. push(x):将元素 x 压入栈顶。

    • x 入队到空队列中(假设为 queue1)。
    • 将另一个队列(queue2)中的所有元素依次出队并入队到 queue1 中。
    • 交换 queue1queue2 的引用,这样空队列变为非空队列,非空队列变为空队列。
  3. pop():移除并返回栈顶元素。

    • 直接从非空队列(现在是 queue2)出队元素。
  4. top():返回栈顶元素,操作类似 pop,但不移除元素,仅返回队首元素。

  5. empty():如果栈是空的,返回 true;否则,返回 false

    • 检查非空队列(queue2)是否为空。

完整代码

Java
class MyStack {
    private Queue<Integer> queue1;
    private Queue<Integer> queue2;

    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }

    public void push(int x) {
        queue2.add(x);
        while (!queue1.isEmpty()) {
            queue2.add(queue1.poll());
        }
        Queue<Integer> temp = queue1;
        queue1 = queue2;
        queue2 = temp;
    }

    public int pop() {
        return queue1.poll();
    }

    public int top() {
        return queue1.peek();
    }

    public boolean empty() {
        return queue1.isEmpty();
    }
}
Python
class MyStack:
    def __init__(self):
        self.queue1 = deque()
        self.queue2 = deque()

    def push(self, x: int) -> None:
        self.queue2.append(x)
        while self.queue1:
            self.queue2.append(self.queue1.popleft())
        self.queue1, self.queue2 = self.queue2, self.queue1

    def pop(self) -> int:
        return self.queue1.popleft()

    def top(self) -> int:
        return self.queue1[0]

    def empty(self) -> bool:
        return not self.queue1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Discuz采集发布插件

Discuz&#xff08;简称DZ&#xff09;是一款知名的开源论坛系统&#xff0c;广泛应用于各类网站社区。对于许多站长来说&#xff0c;保持论坛内容的更新是一项挑战&#xff0c;特别是在内容量庞大的情况下。为了解决这个问题&#xff0c;有一类特殊的插件是用于在Discuz论坛中…

惟客数据《2024泛零售行业大会员经营实践与案例》正式发布

对于多业态、多品牌、多渠道经营的泛零售企业而言&#xff0c;如何改变过去会员经营过程中“各自为政”的状态&#xff1f; 如何让企业内不同业务之间的会员经营“瞄得准、看得穿、打得透、流得通、触得动”&#xff0c;充分发挥多业态、多品牌、多渠道优势&#xff0c;最大化挖…

transformers微调模型后使用pieline调用无法预测列表文本

初学transformers框架 使用trainer简单训练一个文本分类模型三个epoch后 使用piepline调用model 和tokenizer后 发现 传入列表文本后 输出就变得不正常了&#xff0c;为么子哇 如下图

简单说清楚什么是SQL Injection?

最近看完了《The Pragmatic Programmer: 20th Anniversary Edition, 2nd Edition: Your Journey to Mastery》&#xff0c;在第7章&#xff1a;While You Are Coding的footnotes中&#xff0c;提到了一幅漫画&#xff1a; 这不仅用简单的方式说清楚了什么是SQL Injection&#…

【御控物联】JSON结构数据转换在物联业务中应用(场景案例二)

文章目录 一、物联网业务场景现状二、物联网业务场景数据交互格式三、JSON格式数据转换案例四、JSON数据格式转换DEMO 一、物联网业务场景现状 目前&#xff0c;市场上多数物联网关与物联平台捆绑售卖&#xff0c;网关采集到设备数据只能按照指定的协议和规定的数据格式传输到…

蚂蚁测试可控制天气的“龙王”系统

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 所有伟大的发明&#xff0c;都来自最初不切实际的幻想。 4月1日&#xff0c;不少互联网大厂都发布一些新产品&#xff0c;例如&#xff1a;淘宝测试用火箭送快递&#xff0c;蚂蚁集团推出可以控制天气的技术系统畅…

【学习笔记】java项目—苍穹外卖day03

文章目录 苍穹外卖-day03课程内容1. 公共字段自动填充1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3 步骤三 1.4 功能测试1.5 代码提交 2. 新增菜品2.1 需求分析与设计2.1.1 产品原型2.1.2 接口设计2.1.3 表设计 2.2 代码开发2.2.1 文件上传实现2.2.2 新…

MySQL 进阶-----索引使用规则

目录 前言 一、验证索引效率 二、最左前缀法则 三、范围查询 四、索引失效情况 1.索引列运算 2.字符串不加引号 3 .模糊查询 4.or连接条件 5 .数据分布影响 前言 本期我们学习MySQL索引的使用方法&#xff0c;在讲解索引的使用原则之前&#xff0c;先通过一个简单的…

【漏洞复现】通天星CMSV6弱口令漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

探索 Redis 数据库:一款高性能的内存键值存储系统

目录 引言 一、非关系型数据库 &#xff08;一&#xff09;什么是非关系型数据库 &#xff08;二&#xff09;非关系型数据库的主要特征 &#xff08;三&#xff09;关系数据库与非关系型数据库的区别 二、Redis 简介 &#xff08;一&#xff09;基本信息 &#xff08;…

哪一款个微管理助手比较好用?

私域流量兴起&#xff0c;社群运营成为热门&#xff0c;越来越多的行业进入社群的圈子。但是社群管理是个超麻烦、巨琐碎的活儿&#xff0c;方法不对&#xff0c;很容易无限陷入死循环。 此时&#xff0c;一个合适的管理工具可以帮我们高效管理&#xff0c;达到事半功倍的效果…

构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Servi…

云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理

方案概述 现在绝大多数客户都有很多非结构化的数据存在 OSS 中&#xff0c;以图片&#xff0c;视频&#xff0c;音频居多。举一个图片处理的场景&#xff0c;现在各种终端种类繁多&#xff0c;不同的终端对图片的格式、分辨率要求也不同&#xff0c;所以一张图片往往会有很多张…

泰迪智能科技高职人工智能专业人才培养方案

人工智能专业坚持以立德树人为根本&#xff0c;立足社会经济发展&#xff0c;面向信息技术行业&#xff0c;培养德智体美劳全面发展的人工智能领域的高素质工程型专门人才。毕业生具备扎实的数学、自然科学、工程技术、人文社科的基本理论, 系统深入的人工智能专业知识和实践能…

云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权

方案概述 MSE 网关可以为后端服务提供转发路由能力&#xff0c;在此基础上&#xff0c;一些敏感的后端服务需要特定认证授权的用户才能够访问。MSE 云原生网关致力于提供给云上用户体系化的安全解决方案&#xff0c;其中 JWT 认证能力是在 Json Web Token 这种结构化令牌的基础…

递归究竟是什么?如何快速编写正确的递归代码? —— 力扣经典面试题详解

递归究竟是什么&#xff1f;如何快速编写正确的递归代码&#xff1f; —— 力扣经典面试题详解 一、递归1.1 什么是递归&#xff1f;1.2 为什么会用到递归&#xff1f;1.3 如何快速编写正确的递归代码&#xff1f; 二、力扣相关笔试题解析[面试题 08.06. 汉诺塔问题](https://l…

【C++】list介绍

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. list介绍2. list的构造3. ist iterator的使用4. capacity5. element access6. modifiers7. 迭代器失效8. Operations8.1 reverse8.2 sort8.3 unique8.4 splice 1. list介绍 list是可以在常数范围内在任意位置进行插…

关闭搜狗输入法的输入框广告

使用搜狗输入法输入内容时&#xff0c;下面总是会有广告显示 可以通过如下方式关闭该广告显示 通过以上的设置&#xff0c;可以发现输入框不会再显示广告了

MySQL(常用函数、多表查询)

文章目录 1.数据库函数1.count函数案例答案count&#xff08;*&#xff09;与count&#xff08;列&#xff09;的区别 2.sum函数案例答案 3.avg函数案例答案 4.max/min函数案例答案 5.group by 分组统计案例答案 6.字符串相关函数演示练习 7.数学相关函数演示 8.日期相关函数演…

即时配送行业吸引百万骑手就业,这个行业真的赚钱吗?

互联网浪潮的影响下&#xff0c;人们的就业模式开始呈现出多元化的发展趋势&#xff0c;新生代劳动者更加偏爱自由灵活的工作模式。在这样的背景下&#xff0c;同城配送服务的诞生&#xff0c;就为大量骑手创造了灵活的就业机会。据数据平台报告显示&#xff0c;2023年我国外卖…