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



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

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

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

文章目录

摘要

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

描述

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

输入示例Weather 表:

txt 复制代码
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1  | 2015-01-01 | 10          |
| 2  | 2015-01-02 | 25          |
| 3  | 2015-01-03 | 20          |
| 4  | 2015-01-04 | 30          |
+----+------------+-------------+

期望输出

txt 复制代码
+----+
| 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 Foundation

struct Weather {
    var id: Int
    var recordDate: String
    var 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)
]

输出结果

txt 复制代码
[2, 4]

时间复杂度

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

空间复杂度

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

总结

  1. 解法的效率

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

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

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

未来展望

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

参考资料

相关推荐
YONYON-R&D2 分钟前
DEEPSEEK帮写的STM32消息流函数,直接可用.已经测试
算法·消息流
Steve lu1 小时前
回归任务损失函数对比曲线
人工智能·pytorch·深度学习·神经网络·算法·回归·原力计划
蒙奇D索大2 小时前
【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南
数据结构·算法·深度优先·图论·图搜索算法
让我们一起加油好吗2 小时前
【基础算法】高精度(加、减、乘、除)
c++·算法·高精度·洛谷
不会敲代码的灵长类2 小时前
机器学习算法-k-means
算法·机器学习·kmeans
Studying 开龙wu2 小时前
机器学习有监督学习sklearn实战二:六种算法对鸢尾花(Iris)数据集进行分类和特征可视化
学习·算法·机器学习
鑫鑫向栄2 小时前
[蓝桥杯]缩位求和
数据结构·c++·算法·职场和发展·蓝桥杯
Tony__Ferguson3 小时前
简述八大排序(Sort)
数据结构·算法·排序算法
芜湖xin3 小时前
【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列
算法·队列
鑫鑫向栄3 小时前
[蓝桥杯]外卖店优先级
数据结构·c++·算法·职场和发展·蓝桥杯