LeetCode - #180 Swift 实现连续数字查询


文章目录
- 摘要
- 描述
- SQL 解法
- Swift 题解代码
- Swift 题解代码分析
- 核心逻辑
- 关键函数
- 示例测试及结果
- 测试 1
- 测试 2
- 时间复杂度
- 空间复杂度
- 总结
摘要
本文将解决如何从日志数据中找出连续出现至少三次的数字。通过 SQL 查询语句结合 Swift 数据库操作,我们将完成这一任务。文章提供问题描述、Swift 题解答案、代码分析、测试案例和复杂度分析,并附带完整的可运行代码模块。

描述
SQL Schema / Pandas Schema
表:Logs
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| num | varchar |
+-------------+---------+
在 SQL 中,id 是该表的主键。
id 是一个自增列。
找出所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列。
结果格式如下面的例子所示:
示例 1:
输入:
Logs 表:
+----+-----+
| id | num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
输出:
Result 表:
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+
解释: 1 是唯一连续出现至少三次的数字。

SQL 解法
为了找出至少连续出现三次的数字,我们可以使用 SQL 的窗口函数 LEAD 和 LAG:
SELECT DISTINCT num AS ConsecutiveNums
FROM (SELECT num,LAG(num) OVER (ORDER BY id) AS prev_num,LEAD(num) OVER (ORDER BY id) AS next_numFROM Logs
) AS temp
WHERE num = prev_num AND num = next_num;
说明:
- 使用
LAG和LEAD获取当前行的前一行和后一行的数字。 - 检查当前数字
num是否与前后两个数字相同。 - 使用
DISTINCT去重以确保每个符合条件的数字只出现一次。
Swift 题解代码
以下是基于 Swift 的完整实现代码:
import SQLite3func findConsecutiveNumbers(databasePath: String) -> [String] {var db: OpaquePointer?var stmt: OpaquePointer?var results: [String] = []// 打开数据库连接if sqlite3_open(databasePath, &db) == SQLITE_OK {let query = """SELECT DISTINCT num AS ConsecutiveNumsFROM (SELECT num,LAG(num) OVER (ORDER BY id) AS prev_num,LEAD(num) OVER (ORDER BY id) AS next_numFROM Logs) AS tempWHERE num = prev_num AND num = next_num;"""// 准备查询语句if sqlite3_prepare_v2(db, query, -1, &stmt, nil) == SQLITE_OK {// 执行查询并获取结果while sqlite3_step(stmt) == SQLITE_ROW {if let cString = sqlite3_column_text(stmt, 0) {let num = String(cString: cString)results.append(num)}}} else {print("SQL Error: \(String(cString: sqlite3_errmsg(db)))")}// 清理资源sqlite3_finalize(stmt)}sqlite3_close(db)return results
}// 示例测试
let databasePath = "path_to_your_database.sqlite"
let consecutiveNumbers = findConsecutiveNumbers(databasePath: databasePath)
print("Consecutive Numbers: \(consecutiveNumbers)")
Swift 题解代码分析
核心逻辑
-
SQL 查询:
- 使用
LAG和LEAD分别获取当前行的前一行和后一行数字。 - 通过检查条件
num = prev_num AND num = next_num找到符合条件的数字。 - 用
DISTINCT去重,保证每个数字仅出现在结果中一次。
- 使用
-
Swift 数据库接口:
- 通过
sqlite3API 连接 SQLite 数据库。 - 执行查询语句并遍历结果集,将符合条件的数字存储到数组中。
- 通过
-
输出结果:
- 将查询结果以数组形式返回,供后续处理。
关键函数
sqlite3_open: 打开数据库连接。sqlite3_prepare_v2: 准备 SQL 查询语句。sqlite3_step: 执行查询语句并逐行读取结果。sqlite3_finalize和sqlite3_close: 清理资源并关闭数据库。
示例测试及结果
测试 1
数据库内容:
+----+-----+
| id | num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
运行结果:
Consecutive Numbers: ["1"]
测试 2
数据库内容:
+----+-----+
| id | num |
+----+-----+
| 1 | 3 |
| 2 | 3 |
| 3 | 3 |
| 4 | 4 |
| 5 | 4 |
| 6 | 4 |
| 7 | 5 |
+----+-----+
运行结果:
Consecutive Numbers: ["3", "4"]
时间复杂度
- SQL 查询:
- 遍历
Logs表一次以获取窗口函数结果,复杂度为 (O(n))。 - 对结果表进行过滤,复杂度为 (O(n))。
- 遍历
总时间复杂度: (O(n))
空间复杂度
- SQL 查询:
- 使用临时表存储窗口函数结果,空间复杂度为 (O(n))。
- Swift 数组:
- 存储查询结果的数组,空间复杂度为 (O(k)),其中 (k) 是结果集中符合条件的数字个数。
总空间复杂度: (O(n))
总结
通过使用窗口函数 LAG 和 LEAD,我们能够高效地解决连续出现数字的查询问题。本解决方案不仅适用于 SQL 查询,还能通过 Swift 集成到实际项目中,为日志分析、数据挖掘等场景提供可靠支持。
相关文章:
LeetCode - #180 Swift 实现连续数字查询
文章目录 摘要描述SQL 解法Swift 题解代码Swift 题解代码分析核心逻辑关键函数 示例测试及结果测试 1测试 2 时间复杂度空间复杂度总结 摘要 本文将解决如何从日志数据中找出连续出现至少三次的数字。通过 SQL 查询语句结合 Swift 数据库操作,我们将完成这一任务。…...
为什么ip属地一会河南一会江苏
在使用互联网的过程中,许多用户可能会遇到这样一个问题:自己的IP属地一会儿显示为河南,一会儿又变成了江苏。这种现象可能会让人感到困惑,甚至产生疑虑,担心自己的网络活动是否受到了某种影响。为了解答这一疑问&#…...
使用最广泛的FastAPI项目结构推荐,命名规范等
使用最广泛的FastAPI项目结构推荐,命名规范等 一、FastAPI项目结构如下:二、组件管理:使用依赖注入三、命名约定四、建议分层架构的设计五、文档和测试六、版本控制和持续集成七、环境和配置管理工具八、性能优化与权限安全 一、FastAPI项目结…...
[大模型开源]SecGPT 网络安全大模型
模型介绍 SecGPT的愿景是将人工智能技术引入网络安全领域,以提高网络防御的效率和效果。其使命是推动网络安全智能化,为社会提供更安全的数字生活环境。 ① SecGPT开源地址:https://github.com/Clouditera/secgpt② 模型地址:htt…...
android 启动页倒计时页面编写
一、需求和技术 1、实现5,4,3,2,1启动页倒计时 2、倒计时实现使用CountDownTimer 二、activity代码 public class OpenActivity extends AppCompatActivity {private Button in;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanc…...
nuxt3路由及路由拦截
配置 nuxt3没有专门的路由配置文件,是由文件目录自动生成路由 ssr nuxt3会默认所有页面都是服务端渲染,如果需要设置某个页面不走服务端渲染,可以在nuxt.config.js中单独配置 routeRules: {/home: { ssr: false },/spa/**: { ssr: false …...
git版本管理
安装 打开 使用codeup 连接本地仓库和云仓库 找到本地存放代码的位置 单击右键打开git bash 初始化本地库 设置用户签名 显示隐藏文件夹之后才能看到,git文件夹 把这个复制下来 粘贴到bash中 拉取远程仓库的master分支: git pull origin master master分支提交和 dev 分支开…...
382M 雨晨 19045.5247 Win10PE 网络版
文件: YC10PE2025.iso(全内置网络版) 大小: 401473536 字节 修改时间: 2025年1月7日, 星期二, 18 : 40 : 50 MD5: 49E923DCEF86183A908F2D2C9BF07A23 SHA1: 56DF40393DEA9F73733B2A5693658A01F7A2F6C5 CRC32: 3A87F179 https://www.123684.com/s/zEbRVv-…...
在二维数组中列优先存放是怎么进行的
在二维数组中,列优先存放(Column-major order)是一种存储方式,其中数组的列元素在内存中是连续存放的。这意味着,对于一个二维数组 A[m][n],其中 m 是行数,n 是列数,数组的第一列的所…...
Unity【Colliders碰撞器】和【Rigibody刚体】的应用——小球反弹效果
目录 Collider 2D 定义: 类型: Rigidbody 2D 定义: 属性和行为: 运动控制: 碰撞检测: 结合使用 实用检测 延伸拓展 1、在Unity中优化Collider 2D和Rigidbody 2D的性能 2、Unity中Collider 2D…...
CES 2025:ROG打造极致游戏体验
2025年1月7日晚,备受瞩目的CES 2025 ROG新品发布会在万众期待中拉开帷幕。 作为全球领先的电竞和游戏设备制造商,ROG在此次发布会上隆重推出了多款旗舰级新品,包括旗舰专业电竞本ROG枪神9超竞系列、专业电竞本ROG枪神9系列、旗舰游戏本ROG魔霸…...
英伟达 RTX 5090 显卡赋能医疗大模型:变革、挑战与展望
一、英伟达 RTX 5090 与 RTX 4090 技术参数对比 1.1 核心架构与制程工艺 在探讨英伟达 RTX 4090 与 RTX 5090 的差异时,核心架构与制程工艺无疑是最为关键的基础要素,它们从根本上决定了两款显卡的性能上限与应用潜力。 1.1.1 核心架构差异 RTX 4090…...
Windows 11 上配置VSCode 使用 Git 和 SSH 完整步骤
在 Windows 11 上,通过 VSCode 使用 Git 和 SSH 克隆 GitHub 仓库的完整优化步骤如下: 1. 安装必备工具 下载并安装 Git: 访问 Git 官网 下载最新版本。安装时,选择以下选项: Default editor for Git: Use Visual Stud…...
[读书日志]从零开始学习Chisel 第二篇:Scala的变量与函数(敏捷硬件开发语言Chisel与数字系统设计)
第一篇https://blog.csdn.net/m0_74021449/article/details/144887921 2.2 Scala的变量及函数 2.2.1变量定义与基本类型 变量声明 变量首次定义必须使用关键字var或者val,二者的区别是val修饰的变量禁止被重新赋值,它是一个只读的变量。首次定义变量时…...
Unity:删除注册表内的项目记录
然后WinR按键输入regedit 打开注册表 在注册表 HKEY CURRENT USER—>SOFTWARE—>Unity—>UnityEditor—>DefaultCompany —>language_Test 中,删除我们的之前存储的语言环境数据。在 “ 三、文本调用和替换 ” 测试时已经将语言环境存储到注册表中了…...
【记录】东南大学研究生24-25秋季 学位英语考试
上午刚考完学位英语,感觉一般,反正就是能过,但是也不是考的特别好,在备考的过程中的一些资料也感谢很多人的分享,我这边也把24年的期末说明放一份吧 其他ppt和资料github一个大佬整理了,在这里 然后也留下…...
LabVIEW四边形阻抗继电器
基于LabVIEW开发了四边形阻抗继电器,该系统主要应用于电力系统的距离保护中。四边形阻抗继电器在克服短路点过渡电阻的影响及躲避负荷阻抗方面展现出优良的特性。通过LabVIEW图形化编程环境实现的该系统,具备用户友好界面和简便的操作流程,有…...
计算机网络(第8版)第3章课后习题--透明传输
【3-11】 试分别讨论以下各种情况在什么条件下是透明传输,在什么条件下不是透明传 输。(提示:请弄清什么是“透明传输”,然后考虑能否满足其条件。) (1)普通的电话通信。 (2)互联网提供的电子邮件服务。 解 答 : 透明传输是指在数据传输…...
极限学习机 (Extreme Learning Machine, ELM) 算法详解与PyTorch实现
极限学习机 (Extreme Learning Machine, ELM) 算法详解与PyTorch实现 目录 极限学习机 (Extreme Learning Machine, ELM) 算法详解与PyTorch实现1. 极限学习机 (ELM) 算法概述1.1 单隐层前馈神经网络1.2 ELM的优势2. ELM的核心技术2.1 模型定义2.2 随机初始化2.3 最小二乘法2.4…...
Hbuilder ios 离线打包sdk版本4.36,HbuilderX 4.36生成打包资源 问题记录
1、打包文档地址https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios.html#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%89%88%E6%9C%AC%E5%8F%B7 2、配置应用图标 如果没有appicon文件,此时找到 Assets.xcassets 或者 Images.xcassets(看你sdk引入的启动文件中…...
DDrawCompat:让经典Windows游戏在现代系统上焕发新生的终极兼容性方案
DDrawCompat:让经典Windows游戏在现代系统上焕发新生的终极兼容性方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mi…...
调试手记-FUSB302 PD协商异常与MacBook握手失败分析
1. 问题现象与调试环境搭建 最近在实验室调试RK3568开发板时,遇到一个让人头疼的问题:用Type-C线连接MacBook后,充电状态极不稳定,电流表显示充电电流不断跳变,就像在玩"跳房子"游戏。这种情况在工程调试中很…...
434649494
4546465484...
卫星图像分析:地物分类与变化检测的算法
卫星图像分析:地物分类与变化检测的算法 随着遥感技术的快速发展,卫星图像已成为监测地球表面变化的重要数据源。地物分类与变化检测作为卫星图像分析的核心任务,广泛应用于城市规划、环境监测、灾害评估等领域。本文将围绕这一主题…...
工业检测新思路:LingBot-Depth修复ToF传感器缺失深度
工业检测新思路:LingBot-Depth修复ToF传感器缺失深度 在工业检测领域,你是不是经常遇到这样的头疼事:花大价钱买的ToF深度传感器,一到反光表面或者透明材质上,深度数据就“消失”了一大片,留下一个个黑洞。…...
Qwen-Image-Edit-2509开箱即用指南:无需代码,三步完成智能修图
Qwen-Image-Edit-2509开箱即用指南:无需代码,三步完成智能修图 1. 为什么选择Qwen-Image-Edit-2509? 想象一下这样的场景:你刚拍好一组产品照片,却发现背景太杂乱;或者你需要为同一款商品制作不同颜色的展…...
软件风险管理化的识别应对与监控
软件风险管理:识别、应对与监控的关键实践 在数字化时代,软件已成为企业运营的核心载体,但随之而来的风险也日益复杂。软件风险管理旨在通过系统化的方法识别潜在威胁、制定应对策略并持续监控风险变化,从而保障软件项目的顺利交…...
SDMatte处理医学影像的潜力展示:辅助细胞与组织分割
SDMatte处理医学影像的潜力展示:辅助细胞与组织分割 1. 医学影像分析的新思路 显微镜下的细胞图片和医学扫描影像一直是生物医学研究的重要工具。传统的人工标注方法耗时耗力,而专业医学AI模型又往往需要大量标注数据和计算资源。最近我们发现…...
Z-Image-Turbo-辉夜巫女效果增强:结合ControlNet姿势控制生成进阶教程
Z-Image-Turbo-辉夜巫女效果增强:结合ControlNet姿势控制生成进阶教程 1. 模型介绍与部署准备 1.1 什么是Z-Image-Turbo-辉夜巫女 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo模型的LoRA版本,专门针对生成"辉夜巫女"风格图片进行了优化。这…...
数字电路实战:序列检测电路的设计与优化
1. 序列检测电路的基础概念 序列检测电路是数字电路设计中非常实用的功能模块,它的核心任务是识别输入信号中特定的比特序列。想象一下,这就像是在一长串摩斯电码中寻找特定的求救信号,或者是在音乐播放器中检测特定的歌曲前奏。在实际工程中…...
