LeetCode - #197 Swift 实现找出温度更高的日期

ops/2025/2/6 10:23:02/

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

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

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

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

文章目录

    • 摘要
    • 描述
    • 题解答案
    • 题解代码
    • 题解代码分析
    • 示例测试及结果
    • 时间复杂度
    • 空间复杂度
    • 总结
    • 未来展望
    • 参考资料

摘要

本文将介绍如何使用 Swift 解决一个常见的数据库问题:找出与前一天(昨天)相比温度更高的所有日期的 id。我们将通过完整的 Swift 代码实现该功能,并分析时间复杂度和空间复杂度,提供可运行的测试示例以及性能优化建议。

描述

问题背景: 给定一个 Weather 表,表中包含每个日期的温度数据。要求找出温度比昨天更高的所有日期的 id

输入示例Weather 表:

+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1  | 2015-01-01 | 10          |
| 2  | 2015-01-02 | 25          |
| 3  | 2015-01-03 | 20          |
| 4  | 2015-01-04 | 30          |
+----+------------+-------------+

期望输出

+----+
| id |
+----+
| 2  |
| 4  |
+----+

解释

  • 2015-01-02 的温度比 2015-01-01 高(10 -> 25)。
  • 2015-01-04 的温度比 2015-01-03 高(20 -> 30)。

题解答案

我们可以通过遍历 Weather 表,依次比较每一行记录与前一行记录的温度。具体步骤如下:

  1. 遍历数据,获取当前日期与前一日期的温度。
  2. 如果当前日期的温度比前一天高,则记录该日期的 id

题解代码

swift">import Foundationstruct Weather {var id: Intvar recordDate: Stringvar temperature: Int
}func findHigherTemperatures(weatherData: [Weather]) -> [Int] {var result: [Int] = []for i in 1..<weatherData.count {let currentDay = weatherData[I]let previousDay = weatherData[i - 1]// 比较当前日期的温度与前一天的温度if currentDay.temperature > previousDay.temperature {result.append(currentDay.id)}}return result
}// 示例数据
let weatherData = [Weather(id: 1, recordDate: "2015-01-01", temperature: 10),Weather(id: 2, recordDate: "2015-01-02", temperature: 25),Weather(id: 3, recordDate: "2015-01-03", temperature: 20),Weather(id: 4, recordDate: "2015-01-04", temperature: 30)
]// 执行查找温度更高的日期
let result = findHigherTemperatures(weatherData: weatherData)// 输出结果
print(result)  // 输出: [2, 4]

题解代码分析

  1. 数据结构
    • 使用 Weather 结构体来表示每一行数据,其中 id 为日期的唯一标识符,recordDate 为日期,temperature 为该日期的温度。
  2. 算法逻辑
    • 使用循环遍历 weatherData 数组,从第二天开始与前一天的数据进行比较。
    • 如果当前日期的温度高于前一天,则将当前日期的 id 添加到结果数组 result 中。
  3. 输出结果
    • 输出温度更高的日期的 id,即 [2, 4]

示例测试及结果

输入数据

swift">let weatherData = [Weather(id: 1, recordDate: "2015-01-01", temperature: 10),Weather(id: 2, recordDate: "2015-01-02", temperature: 25),Weather(id: 3, recordDate: "2015-01-03", temperature: 20),Weather(id: 4, recordDate: "2015-01-04", temperature: 30)
]

输出结果

[2, 4]

时间复杂度

  • 遍历数据:我们对 weatherData 数组进行了一次遍历,时间复杂度为 O(n),其中 n 为数组的长度。
  • 总时间复杂度O(n)

空间复杂度

  • 存储结果:我们只使用了一个 result 数组来存储结果,空间复杂度为 O(k),其中 k 为符合条件的日期数量。
  • 总空间复杂度O(n)(存储输入数据和输出结果)。

总结

  1. 解法的效率

    • 本解法简单高效,时间复杂度为 O(n),适用于处理不太大的数据集。
  2. 适用场景

    • 适用于天气数据分析、日常数据记录等需要进行日期间比较的场景。
  3. 改进方向

    • 如果数据量较大,可以考虑使用数据库来进行类似的查询,避免将所有数据加载到内存中进行处理。

未来展望

  1. 多维度比较
    • 可以扩展算法,不仅比较温度,还可以比较湿度、风速等其他气象数据。
  2. 实时数据处理
    • 考虑对实时天气数据进行动态处理,例如获取最新的天气数据并及时更新记录。

参考资料

  • LeetCode 官方题解
  • Swift 官方文档

http://www.ppmy.cn/ops/156124.html

相关文章

关于大模型 AGI 应知应会_生在AI发展的时代

在 AI 时代&#xff0c;大模型和通用人工智能&#xff08;AGI&#xff09;正在深刻改变我们的生活和工作方式。以下是一些关于大模型和 AGI 的关键知识点&#xff0c;帮助我们更好地理解这一技术浪潮。 一、大模型的核心概念与特点 &#xff08;一&#xff09;什么是大模型 …

需求分析应该从哪些方面来着手做?

需求分析一般可从以下几个方面着手&#xff1a; 业务需求方面 - 与相关方沟通&#xff1a;与业务部门、客户等进行深入交流&#xff0c;通过访谈、问卷调查、会议讨论等方式&#xff0c;明确他们对项目的期望、目标和整体业务需求&#xff0c;了解项目要解决的业务问题及达成的…

Vue 中如何嵌入可浮动的第三方网页窗口(附Demo)

目录 前言1. 思路Demo2. 实战Demo 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 1. 思路Demo 以下Demo提供思路参考&#xff0c;需要结合实际自身应用代码 下述URL的链接使用百度替代&#xff01; 方式 1…

在Mapbox GL JS中“line-pattern”的使用详解

在Mapbox GL JS中&#xff0c;line-pattern 是一种用于在地图上绘制带有图案的线条的样式属性。通过 line-pattern&#xff0c;你可以使用自定义的图像作为线条的图案&#xff0c;而不是使用纯色或渐变。 1. 基本概念 line-pattern: 该属性允许你指定一个图像作为线条的图案。…

自定义数据集 使用scikit-learn中svm的包实现svm分类

数据集生成&#xff1a; - 使用 make_classification 函数生成包含1000个样本的数据集&#xff0c;设置20个特征&#xff0c;其中10个是有信息的特征&#xff0c;类别数为2&#xff0c;通过设置 random_state 42 保证每次运行生成的数据相同。 数据划分&#xff1a; - 使用…

PAT甲级1052、Linked LIst Sorting

题目 A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, you are supposed to sort the stru…

自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

自定义数据集&#xff1a;继承 torch.utils.data.Dataset 类创建自定义数据集&#xff0c;并重写 __len__ 和 __getitem__ 方法。 定义逻辑回归模型&#xff1a;继承 nn.Module 类&#xff0c;定义一个线性层&#xff0c;并在 forward 方法中应用sigmoid激活函数。 训…

数据库系统概念第六版记录 一

1.关系型数据库 关系型数据库&#xff08;Relational Database&#xff0c;简称 RDB&#xff09;是基于关系模型的一种数据库&#xff0c;它通过表格的形式来组织和存储数据。每个表由若干行&#xff08;记录&#xff09;和列&#xff08;字段&#xff09;组成&#xff0c;数据…