( 哈希表) 217. 存在重复元素 ——【Leetcode每日一题】

news2025/1/14 1:10:46

❓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

提示:

  • 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
  • − 1 0 9 < = n u m s [ i ] < = 1 0 9 -10^9 <= nums[i] <= 10^9 109<=nums[i]<=109

💡思路:

方法一:排序
在对数字从小到大排序之后,数组的重复元素一定出现在相邻位置中。

因此,我们可以扫描已排序的数组,每次判断相邻的两个元素是否相等,如果相等则说明存在重复的元素。

方法二:哈希表

对于数组中每个元素,我们将它插入到哈希表中。

  • 如果插入一个元素时发现该元素已经存在于哈希表中,则不会再插入
  • 最后比较哈希表元素个数,如果小于数组元素个数,则一定存在重复元素。

🍁代码:(Java、C++)

方法一:排序
Java

class Solution {
    public boolean containsDuplicate(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        for (int i = 0; i < n - 1; i++) {
            if (nums[i] == nums[i + 1]) {
                return true;
            }
        }
        return false;
    }
}

C++

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int n = nums.size();
        for (int i = 0; i < n - 1; i++) {
            if (nums[i] == nums[i + 1]) {
                return true;
            }
        }
        return false;
    }
};

方法二:哈希表
Java

class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> s = new HashSet<>();
        for(int num : nums){
            s.add(num);
        }
        return s.size() < nums.length;
    }
}

C++

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_set<int> s;
        for(int num : nums){
            s.insert(num);
        }
        return s.size() < nums.size();
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 是数组中的元素数量。排序法时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)
  • 空间复杂度 O ( n ) O(n) O(n),其中 n 是数组中的元素数量,主要为哈希表的开销。排序法空间复杂度为 O ( l o g n ) O(logn) O(logn),考虑递归调用栈的深度。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

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

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

相关文章

工作7年的程序员,明白了如何正确的“卷“

背景 近两年&#xff0c;出台和落地的反垄断法&#xff0c;明确指出要防止资本无序扩张。 这也就导致现在的各大互联网公司&#xff0c;不能再去染指其他已有的传统行业&#xff0c;只能专注自己目前存量的这些业务。或者通过技术创新&#xff0c;开辟出新的行业。 但创新这…

go-zore入门,可能看这一篇就行了

本文主要内容 微服务框架对比goctl的安装和使用go-zore的api服务go-zore的rpc服务一探负载均衡的实现方法服务发现使用consul代替etcd实现服务发现中间件的实现相关代码已传送至gitee点击获取代码文中相关连接无跳转请点击查看原文 go微服务框架对比 参考文档 在 Go 语言中&…

AI | 浅谈AI技术以及其今后发展

文章概要 近期AI成为热点话题&#xff0c; GPT&#xff0c; new bing&#xff0c; bard&#xff0c;AI 绘画等 AI 编程工具引发大量讨论。请结合自身学习与工作经历&#xff0c;一起来聊聊你对AI技术以及其今后发展的看法吧。 &#x1f31f;&#x1f31f;&#x1f31f;个人简介…

【VSCode】1、VSCode 如何连接服务器

文章目录 一、安装 remote-ssh 插件二、直接连接三、配置 SSH 公匙&#xff0c;免密登录 一、安装 remote-ssh 插件 点击插件搜索框&#xff0c;搜 remote-ssh&#xff0c;点击安装 安装完成后就会出现下面的图标&#xff1a; 二、直接连接 点击加号&#xff0c;输入 ssh 连接…

Web前端(更新中)

文章目录 什么是WEB前端HTMLHTML的简介运行环境和开发环境标签的语法结构页面的分类 常用标签head中常用标签body中的常用标签&#xff0c;特殊符号&#xff0c;语义化标签 什么是WEB前端 简单来说就是网页&#xff0c;由多种技术参与制作的&#xff0c;向用户展示的页面 技术…

Java 20和IntelliJ IDEA,一起让开发变得更轻松!

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 相…

JavaScript 中函数 柯里化风格的运用

导语 当我第一次看见 柯里化 这个词语的时候&#xff0c;我也表现出一脸懵&#xff0c;在代码程序中&#xff0c;看见这种 “高大上”的一些词汇叫法的时候&#xff0c;下意识的会觉得这个概念很难很深奥&#xff0c;但是当冷静下来&#xff0c;去深究过后&#xff0c;就会发现…

Jetson 学习笔记(十六):使用SDK Manager烧录Jetson Nano

SDK Manager 前期准备开始安装 前期准备 安装VMware虚拟机&#xff0c;Ubuntu系统&#xff0c;VMware tools&#xff0c;然后在Ubuntu中安装Nvidia SDK Manager&#xff0c;最后进行烧录。 VMware、Ubuntu系统以及VMware tools&#xff1a;安装链接Nvidia SDK Manager&#x…

ArcGIS Pro数据

目录 1 数据模型 1.1 矢量数据 1.2 栅格数据 1.2.1 栅格数据用途 1.2.2 影像数据地理属性 1.2.3 影像分辨率 1.2.4 栅格波段 2 常用数据格式 2.1 CAD 2.1.1 CAD格式 2.1.2 CAD要素数据集 2.1.3 CAD要素数据集要素类 2.1.4 ArcGIS Pro支持的AutoCAD和MicroStation要…

为什么Web自动化测试需要掌握多种技能?看完就知道了

B站首推&#xff01;2023最详细自动化测试合集&#xff0c;小白皆可掌握&#xff0c;让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 1.编程语言 2.Web开发知识 3.自动化测试框架 4.版本控制系统 5.数据库基础知识 历史进程&#xff1a;…

详解RocketMQ ACL机制的设计实现原理

一、序言 RocketMQ在4.4版本之后为我们提供了ACL权限校验机制,可以实现针对Topic资源级别的用户访问权限控制,ACL的实现能够在一定程度上保证RocketMQ集群数据的安全性。试想一下,如果没有ACL权限校验,在生产环境上只要部署任意的RocketMQ控制台就可以对topic进行操作,存…

【无人机】无人机平台的非移动 GPS 干扰器进行位置估计的多种传感器融合算法的性能分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

如何通过 8 个必备技巧确定工作任务的优先级

你的每项任务都同样紧急吗&#xff1f; 你是否制定了一个简单的待办事项清单&#xff0c;并从头到尾地完成每一项任务&#xff1f; 如果你实际上没有对任务进行优先排序&#xff0c;那么这个项目会被拉长。当你不知道如何根据你或你的团队的效率进度来确定项目的优先次序时&a…

Flutter 透明视频播放插件——基于字节跳动AlphaPlayer

字节跳动&#xff1a;AlphaPlayer GitHub - bytedance/AlphaPlayer: AlphaPlayer is a video animation engine. 关于透明视频 透明视频的播放&#xff0c;对于webm格式的视频&#xff0c;在h5上面是很容易播放的 但是对于android或者flutter来说&#xff0c;尤其flutter的…

PoE、PoE+、PoE++交换机功率用途有何不同

随着网络部署终端的设备越来越多&#xff0c;场景千差万别、布署时间有先有后&#xff0c;因此通过PoE交换机为其远程供电是最佳的选择。我们一般常见的PoE、PoE交换机比较多&#xff0c;PoE目前还有待进一步被人了解&#xff0c;这三款的区别可以从历史进程上来进行总结归纳。…

【linux-进程2】进程控制

&#x1f308;环境变量 &#x1f344;初识 系统带的命令可以直接运行&#xff08;ls ll命令等&#xff09;&#xff0c;但是我们自己写的命令必须要带上路径才能运行&#xff08;./myproc&#xff09;&#xff0c;这是什么原因导致的&#xff1f;如果我们也想自己写的命令直接…

实时数仓--数据实时接入模块相关视频录制完成

数据实时接入部分的视频已于昨晚录制完成&#xff0c;由于视频中涉及实现思路和实现代码都来自生产项目&#xff0c;且经过作者多次熬夜录制完成&#xff0c;所以这套视频需付费观看&#xff0c;介意的朋友请见谅。 具体说明如下&#xff1a; 对《实时数仓架构那些事儿》系列文…

【LeetCode】404. 左叶子之和

1.问题 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24 示例 2 输入: root [1] 输出: 0 提示: 节点数…

day4-中等篇-环形链表2

这是环形链表的升级版&#xff0c;也就是找到尾部连接的第二个节点并返回&#xff1b; 分两步&#xff1a;第一步判断是否有环&#xff0c;第二步找到节点 为什么找到节点是这样&#xff1f;原因是快慢指针相遇之后&#xff0c;慢指针到head的距离和新指针q到head的距离相同&am…

Koa2的基本使用

一、新建一个文件夹 首先打开终端&#xff0c;输入node -V命令检查Node版本&#xff0c;对于Koa2框架需要Node版本高于7.6使用npm init -y这个命令可以快速创建出package.json文件使用npm install koa下载最新版本koa到当前项目 二、初步使用 创建app.js // 创建koa对象 c…