当前位置: 首页 > news >正文

【Swift 算法实战】判断数组中是否存在重复元素

在这里插入图片描述
在这里插入图片描述

网罗开发 (小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:极星会首批签约作者

文章目录

    • 摘要
    • 描述
    • 题解答案
    • 题解代码分析
      • 思路
      • Swift 代码实现
    • 示例测试及结果
      • 示例 1:
      • 示例 2:
      • 示例 3:
    • 时间复杂度与空间复杂度
    • 总结
    • 参考资料

摘要

在这篇文章中,我们将实现一个简单的算法来判断一个整数数组中是否包含至少一个重复元素。根据题目要求,如果数组中任意元素出现至少两次,返回 true,否则返回 false。我们将介绍几种常见的解法,并重点关注效率和性能优化。

描述

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

示例 1:

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

输出: true

解释:

元素 1 在下标 0 和 3 出现。

示例 2:

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

输出: false

解释:

所有元素都不同。

示例 3:

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

输出: true

提示:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109

题解答案

为了判断数组中是否存在重复元素,我们可以使用以下几种方法:

  1. 使用 Set(集合)来判断
    由于集合中的元素是唯一的,我们可以利用这一点来快速判断是否有重复的元素。如果在插入元素时发现该元素已经存在于集合中,则表示有重复元素。

  2. 使用暴力法
    通过嵌套循环遍历每对元素,逐一比较,判断是否有重复值。尽管实现简单,但性能较差,尤其是在大数组时效率低下。

  3. 排序法
    将数组排序后,只需遍历一次数组,检查相邻元素是否相等。排序的时间复杂度为 O(n log n),在一定情况下可能比 Set 更高效。

在这里,我们重点介绍第一种方法,使用 Swift 中的 Set 来判断是否有重复元素。

题解代码分析

思路

  • 遍历数组,尝试将每个元素加入 Set 中。
  • 如果元素已经存在于 Set 中,返回 true,表示存在重复元素。
  • 如果遍历完成后没有发现重复元素,返回 false

Swift 代码实现

func containsDuplicate(_ nums: [Int]) -> Bool {var seen = Set<Int>()for num in nums {if seen.contains(num) {return true // 找到重复元素}seen.insert(num) // 将当前元素插入 Set}return false // 没有重复元素
}

示例测试及结果

示例 1:

let nums1 = [1, 2, 3, 1]
print(containsDuplicate(nums1)) // 输出 true

示例 2:

let nums2 = [1, 2, 3, 4]
print(containsDuplicate(nums2)) // 输出 false

示例 3:

let nums3 = [1, 1, 1, 3, 3, 4, 3, 2, 4, 2]
print(containsDuplicate(nums3)) // 输出 true

时间复杂度与空间复杂度

  • 时间复杂度O(n)
    遍历数组一次,每次操作 Set 的插入和查找都是常数时间复杂度 O(1)

  • 空间复杂度O(n)
    最坏情况下,Set 会存储 n 个元素,因此空间复杂度是 O(n)

总结

本文介绍了如何高效判断数组中是否有重复元素。我们使用了 Set 数据结构,利用其元素唯一的特性,可以在 O(n) 的时间复杂度内完成判断。相比暴力法和排序法,使用 Set 提供了一种简洁且高效的解决方案。

这种方法不仅适用于整数数组,还能处理其他类型的数据,具有广泛的应用场景。

未来如果有更复杂的需求(如需要额外的信息,或者需要考虑其他数据结构的优化),可以考虑使用哈希表或其他数据结构,进一步提升算法的性能和可扩展性。

参考资料

  • Swift 官方文档
  • LeetCode 题目解答:Contains Duplicate

相关文章:

【Swift 算法实战】判断数组中是否存在重复元素

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

机器学习数学基础:35.效度

效度全攻略&#xff1a;从理论到实践的深度剖析 一、效度&#xff08;Validity&#xff09;入门&#xff1a;揭开精准测量的面纱 效度&#xff0c;简单来说&#xff0c;就是测量工具能否准确命中目标的“命中率”。想象你手中有一把枪&#xff08;测量工具&#xff09;&#…...

excel单、双字节字符转换函数(中英文输入法符号转换)

在Excel中通常使用函数WIDECHAR和ASC来实现单、双字节字符之间的转换。其中 WIDECHAR函数将所有的字符转换为双字节&#xff0c;ASC函数将所有的字符转换为单字节 首先来解释一下单双字节的含义。单字节一般对应英文输入法的输入&#xff0c;如英文字母&#xff0c;英文输入法…...

重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 整合 Elasticsearch 8.x &#xff08;二&#xff09;使用Repository 1. 环境准备 1.1 项目依赖1.2 Elasticsearch 配置 2. 使用Repository的基本步骤 2.1 创建实体类2.2 创建 Reposit…...

Jenkinsfile流水线构建教程

前言 Jenkins 是目前使用非常广泛的自动化流程的执行工具, 我们目前的一些自动化编译, 自动化测试都允许在 Jenkins 上面. 在 Jenkins 的术语里面, 一些自动化工作联合起来称之为流水线, 比如拉取代码, 编译, 运行自动化测试等. 本文的主要目的是引导你快速熟悉 Jenkinsfile …...

比创达电子科技-EMC干货之防静电技术

EMC干货之防静电技术 什么是静电放电 两个具有不同静电电位的物体&#xff0c;由于直接接触或静电场感应引起两物体间的静电电荷的转移,静电电场的能量达到一定程度后&#xff0c;击穿其间介质而进行放电的现象就是静电放电,简称为ESD(Electro Static Discharge)。 静电产生的原…...

PDF扫描档智能方向识别:多模型投票机制的实践测试 救活古典书籍

2025-02-22 20:10物联全栈123 尊敬的诸位&#xff01;我是一名物联网工程师。关注我&#xff0c;持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与 AI 的无尽可能 RAG知识库搭建的过程中&#xff0c;扫描档pdf的支持和准确率一直是个大家都不愿主动提起的事情…...

算法教程:岛的最大面积

算法教程:岛的最大面积 我们将首先讨论问题和解决方案,然后使用可视化工具(上一篇博客中进行了介绍)来更好地理解搜索过程。 问题描述 我们将要演练的具体问题是问题 Leetcode:岛屿的最大面积。在 Leetcode 上找到的直接问题描述是: 给你一个 m x n 二进制矩阵网格。岛…...

18439二维前缀和

18439二维前缀和 ⭐️难度&#xff1a;中等 &#x1f4d6; &#x1f4da; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int m scanner.nextInt();int q s…...

information_schema.processlist 表详解

information_schema.processlist 表&#xff08;或 SHOW PROCESSLIST; 命令&#xff09;用于查看 MySQL 当前所有的连接进程&#xff0c;帮助管理员监控数据库活动并排查性能问题。以下是该表的字段及其具体含义&#xff1a; &#x1f539; information_schema.processlist 字段…...

数字化转型数据自动采集统计分析发那科(FANUC)数据采集

针对各类数控机床&#xff0c;特别是FANUC系列的数据自动采集需求&#xff0c;以下是一个综合性的解决方案&#xff0c;并详细说明了如何采集FANUC系列机床的各类数据。 一、数据采集方案概述 协议支持&#xff1a; 以适应不同数控机床的通信需求。 针对FANUC系列机床…...

olmOCR:使用VLM解析PDF

在PDF解析中&#xff0c;目前主流的开源工具包括Minuer、GOT OCR等。主要都是通过飞桨等OCR套件组装的一套pipeline&#xff0c;或者直接通过VLM解析图像。 #一、 olmOCR是使用VLM进行的端到端的PDF文档解析 二、document-anchoring 与上述的不同在于&#xff0c;olmOCR使用…...

【自学嵌入式(11)闪存文件系统的应用】

闪存文件系统的应用 闪存文件插件程序的配置上传程序实例一上传程序实例二——上传文件到ESP8266的程序 上篇文章简要了解了闪存文件系统的概念&#xff0c;相关头文件、类以及方法。但我们只尝试了向开发板中传输文本数据&#xff0c;对于更加复杂的内容(如一个界面、一个互动…...

Spring Cloud——路由网关Zuul

??? 哈喽&#xff01;大家好&#xff0c;我是【一心同学】&#xff0c;一位上进心十足的【Java领域博主】&#xff01;??? 【一心同学】的写作风格&#xff1a;喜欢用【通俗易懂】的文笔去讲解每一个知识点&#xff0c;而不喜欢用【高大上】的官方陈述。 【一心同学】博客…...

ShenNiusModularity项目源码学习(14:ShenNius.Infrastructure项目分析)

ShenNius.Infrastructure项目用于定义ShenNius.Admin.Mvc项目和ShenNius.Admin.API项目共用的特性类、数据操作接口实现类、上下文类、通讯类&#xff0c;主要文件的用途如下&#xff1a;   Attributes文件夹保存特性类或过滤器类定义&#xff0c;主要包括&#xff1a;   …...

【博资考4】网安学院-硕转博考试内容

【博资考4】硕转博考试内容 - 网络安全与基础理论 写在最前面一. **21年硕转博面试内容回顾**网络、逆向、操作系统、攻防、漏洞1. **网络安全常见攻击方式及其防范措施**1.1 **DDoS攻击&#xff08;分布式拒绝服务&#xff09;**1.2 **SQL注入攻击**1.3 **XSS攻击&#xff08;…...

web前端初学Angular由浅入深上手开发项目

Angular 是一个功能强大的前端框架&#xff0c;适合构建复杂的企业级应用。作为初学者&#xff0c;通过由浅入深的学习路径&#xff0c;可以快速上手并开发项目。以下是逐步学习 Angular 的指导&#xff1a; 1. 基础知识 (1) 了解 Angular Angular 是什么&#xff1f; Angul…...

5.10 P-Tuning v2:多层级提示编码的微调革新

P-Tuning v2:多层级提示编码的微调革新 一、技术架构解析 #mermaid-svg-4Wy6vkXZi67hY9PZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4Wy6vkXZi67hY9PZ .error-icon{fill:#552222;}#mermaid-svg-4Wy6vkXZi67h…...

RuntimeWarning: invalid value encountered in scalar power在进行标量的幂运算时遇到了无效值

year_profit ((profit / initial_cash) ** (1 / yy) - 1) * 100 RuntimeWarning: invalid value encountered in scalar power 这个警告表示在执行标量幂运算 ((profit / initial_cash) ** (1 / yy) - 1) * 100 时遇到了无效值。常见的引发原因及解决办法如下&#xff1a; ###…...

LabVIEW同步数据采集功能

VI通过使用数据采集&#xff08;DAQ&#xff09;硬件系统&#xff0c;进行多通道同步采集&#xff0c;实时获取模拟信号数据。它利用外部时钟信号触发数据采集&#xff0c;支持连续采样模式&#xff0c;并将采集到的数据实时显示在波形图上&#xff0c;方便用户进行数据监控和分…...

(21)从strerror到strtok:解码C语言字符函数的“生存指南2”

❤个人主页&#xff1a;折枝寄北的博客 ❤专栏位置&#xff1a;简单入手C语言专栏 目录 前言1. 错误信息报告1.1 strerror 2. 字符操作2.1 字符分类函数2.2 字符转换函数 3. 内存操作函数3.1 memcpy3.2 memmove3.2memset3.3 memcmp 感谢您的阅读 前言 当你写下strcpy(dest, s…...

【Azure 架构师学习笔记】- Azure Databricks (12) -- Medallion Architecture简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (11) – UC搭建 前言 使用ADB 或者数据湖&#xff0c;基本上绕不开一个架构“Medallion”&#xff0c; 它使得数据管理更为简单有效。ADB 通过…...

Golang——内存(内存管理、内存逃逸、垃圾回收 (GC) 机制)

大家好&#xff0c;这里是编程Cookbook。本文详细介绍Go内存相关的内容&#xff0c;包括内存管理、内存逃逸、垃圾回收 (GC) 机制的三色标记&#xff0c;写屏障。 文章目录 Go 的内存管理mspan && arenasarenasmspan mcachemcentralmheap内存分配逻辑内存回收逻辑优势内…...

关系型数据库的技术思路

一、网络协议 需要根据TCP协议设计一个客户端和服务器之间的命令响应协议。 1、服务端回复声明 2、客户端发送登录包 3、服务端返回登录结果 4、登录成功后进入命令阶段&#xff0c;否则退出。 二、每个连接用一个线程 服务器为每个客户端连接开启一个线程。 三、需要文件的随机…...

web安全——分析应用程序

文章目录 一、确定用户输入入口点二、确定服务端技术三、解析受攻击面 一、确定用户输入入口点 在检查枚举应用程序功能时生成的HTTP请求的过程中&#xff0c;用户输入入口点包括&#xff1a; URL文件路径 通常&#xff0c;在查询字符?之前的URL部分并不视为用户输入入口&am…...

数据库事务的基本要素(ACID)

数据库事务的基本要素&#xff08;ACID&#xff09; 在数据库管理系统&#xff08;DBMS&#xff09;中&#xff0c;事务&#xff08;Transaction&#xff09;是一个或多个数据库操作的集合&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。事务的目标是保证数据的一…...

server.servlet.session.timeout: 12h(HTTP 会话的超时时间为 12 小时)

从你提供的配置文件&#xff08;应该是 Spring Boot 的 application.yml 或 application.properties 文件&#xff09;来看&#xff0c;以下部分与会话超时时间相关&#xff1a; server:servlet:session:timeout: 12h # timeout: 30cookie:name: VENDER_SID会话超时时间的…...

Docker数据卷容器实战

数据卷容器 数据共享 上面讲述的是主机和容器之间共享数据&#xff0c;那么如何实现容器和容器之间的共享数据呢&#xff1f;那就是创建 创建数据卷容器。 命名的容器挂载数据卷&#xff0c;其他容器通过挂载这个&#xff08;父容器&#xff09;实现数据共享&#xff0c;挂载…...

基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南

基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南 基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南 基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南一、注册火山引擎账号二、RAG技术核心原理三、环境与工具准备1. 核心组件2. 依赖配…...

Java内存的堆(堆内、堆外)、栈含义理解笔记

一、核心概念区分 1. 内存中的堆&#xff08;Heap&#xff09;与栈&#xff08;Stack&#xff09; 栈内存 ▸ 用途&#xff1a;存储方法调用、局部变量、基本类型数据&#xff08;如 int a 1&#xff09; ▸ 特点&#xff1a; 线程私有&#xff0c;每个线程独立分配栈空间。…...

2.7 大模型RAG内容安全合规检查-大模型ACP模拟题-真题

单选题 在RAG应用中&#xff0c;输入内容合规检查的正确顺序是&#xff1f; A. 先处理模型生成&#xff0c;后检查用户输入 B. 先检查用户输入&#xff0c;后处理模型生成 ✅ C. 仅检查用户输入 D. 仅检查模型输出 解析&#xff1a;合规流程应优先过滤用户输入风险&#xff0…...

C#从入门到精通(35)—如何防止winform程序因为误操作被关闭

前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发的上位机软件运行起来以后,一般在右上角都有一个关闭按钮,正常情况下点击关闭按钮就能关闭软件,但是不排除我们不想关闭软件,但是因为不…...

特斯拉 FSD 算法深度剖析:软件层面全解读

一、引言 特斯拉的 FSD&#xff08;Full Self-Driving&#xff09;系统作为自动驾驶领域的前沿成果&#xff0c;其软件层面的算法设计至关重要。本文将从软件的角度&#xff0c;深入探讨特斯拉 FSD 所采用的算法&#xff0c;包括感知、规划、控制等多个方面&#xff0c;以期为…...

中央一号文件里的三维革命:数字孪生如何重构智慧乡村生态?

2024年中央一号文件提出"建设宜居宜业和美乡村"&#xff0c;这一目标背后离不开数字技术的支撑。在浙江某数字乡村试点&#xff0c;凡拓数创通过三维建模还原整村风貌&#xff0c;路灯能耗、垃圾分类、古建保护等数据在虚拟空间中实时跳动。管理人员坦言&#xff1a;…...

DeepSeek 助力 Vue3 开发:打造丝滑的页眉(Header)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

一个原教旨的多路径 TCP

前面提到过 ECMP 和 TCP 之间的互不友好&#xff0c;pacing 收益和中断开销的互斥&#xff0c;在事实上阻碍了 packet-based LB 的部署&#xff0c;也限制了交换机&#xff0c;服务器的并发性能&#xff0c;同时潜在增加了 bufferbloat 的概率&#xff0c;而适用 packet-based …...

DDD 架构之领域驱动设计【通俗易懂】

文章目录 1. 前言2. MVC 对比 DDD3. DDD 分层架构4. 完整业务流程 1. 前言 官方回答&#xff1a;DDD是一种应对复杂业务系统的设计方法&#xff0c;通过将软件设计与业务领域紧密结合&#xff0c;帮助开发人员构建清晰、可维护的领域模型。在复杂的业务系统中&#xff0c;它能…...

蓝桥杯15届JavaB组6题

一开始用的dfs&#xff0c;但是好像是因为数据量太大&#xff0c;数据错误&#xff0c;而且会超时&#xff0c;然后使用bfs dfs的代码&#xff08;自留&#xff09;&#xff1a; import java.util.*;public class F15 {public static void main(String[] args) {Scanner sc n…...

Python 爬虫与网络安全有什么关系

Python爬虫和网络安全之间存在密切的关系。爬虫是一种用于自动化从网络上获取信息的程序&#xff0c;而网络安全是保护计算机网络和系统免受未经授权的访问、攻击和数据泄露的实践。本文将探讨Python爬虫与网络安全之间的关系以及如何在爬虫开发中注意网络安全。 爬虫的作用和…...

如何判断数据是否使用AES加密以及如何使用AES解密

在现代软件开发中&#xff0c;数据加密是保护敏感信息的重要手段。AES&#xff08;Advanced Encryption Standard&#xff09;是一种广泛使用的对称加密算法&#xff0c;因其安全性和高效性而被广泛应用。本文将介绍如何判断数据是否使用AES加密&#xff0c;并详细讲解如何使用…...

C++ Primer 泛型算法结构

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

java给钉钉邮箱发送邮件

1.开通POP和IMAP 2.引入pom <dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version> </dependency>3.逻辑 String host "smtp.qiye.aliyun.com"; String port "…...

交安ABC-公路水运工程企业安全员ABC如何报名?报名要哪些条件?

交安ABC的报名方式及报名条件如下&#xff1a; 报名方式 1. 企业注册&#xff1a;企业要进入交通运输部公路水运工程施工主要负责人和安全生产管理人员信息管理系统&#xff0c;注册企业账户&#xff0c;提交企业相关信息&#xff0c;填写企业资料。 2. 发送审核&#xff…...

软件测试丨Docker与虚拟机架构对比分析

Docker 与虚拟机&#xff08;VM&#xff09;在架构上有显著区别&#xff0c;主要体现在资源利用、性能、隔离性和启动时间等方面。以下是两者的主要架构区别&#xff1a; 1. 架构层次 Docker: 主机操作系统&#xff1a;Docker 直接运行在宿主机的操作系统上。Docker 引擎&…...

Gatling介绍

Gatling&#xff1a;基于Scala的高性能负载测试工具 一、Gatling 简介 Gatling 是一个开源的 HTTP 压力测试工具&#xff0c;专为高并发场景设计&#xff0c;支持 HTTP/HTTPS、WebSocket、Kafka 等协议。其基于 Scala 的脚本语法简洁高效&#xff0c;支持实时报告生成和分布式…...

Shot Studio for macOS 发布 1.0.2

Shot Studio 是一个 macOS 的 app&#xff0c;专门为开发者设计&#xff0c;主要用于各大 app 应用商店的预览图设计。 提供了非常多的模板&#xff0c;也预设了很多尺寸。可以直接一键使用 在 1.0.2 这个版本中新增了&#xff1a; 文本渐变 图层&#xff1a;边框、颜色、圆…...

基于Spring Boot的乡村养老服务管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Harbor服务需要crt证书,而下载是nginx的证书pem,应该怎么处理

1. 明确文件用途 shgbitai.com.key&#xff1a;SSL 私钥文件&#xff08;与 Apache/Nginx 通用&#xff09;。shgbitai.com.pem&#xff1a;已合并的证书文件&#xff08;通常包含域名证书 中间证书链&#xff09;。 Nginx 的证书通常以 .pem 或 .crt 为后缀&#xff0c;而 …...

Hadoop第一课(配置linux系统)

1、让hadoop用户&#xff0c;有root权限&#xff0c;如果可以不输密码更好&#xff1a; (1)先登入root用户 (2)visudo命令进入配置文件 (3)找到 root ALL(ALL) ALL这一行&#xff0c;在该行下面增加:hadoop ALL(ALL) ALL &#xff08;&#xff1a;set nu可以显示行号&#xff…...

Java+Vue+uniapp微信小程序校园自助打印系统(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今时代&#xff0c;网络与科学技术正以前所未有的速度迅猛发展&#xff0c;这股强大…...