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. 实时数据处理
    • 考虑对实时天气数据进行动态处理,例如获取最新的天气数据并及时更新记录。

参考资料

相关推荐
飞yu流星24 分钟前
c++ stl 遍历算法和查找算法
开发语言·c++·算法
嗯嗯你说的对3 小时前
记忆化搜索和动态规划 --最长回文子串为例
算法·动态规划
金融OG3 小时前
98.2 AI量化开发:基于DeepSeek打造个人专属金融消息面-AI量化分析师(理论+全套Python代码)
人工智能·python·算法·机器学习·数学建模·金融
某个默默无闻奋斗的人5 小时前
三傻排序的比较(选择,冒泡,插入)
java·数据结构·算法
黄雪超7 小时前
算法基础——一致性
大数据·算法·一致性
敲上瘾7 小时前
BFS(广度优先搜索)——搜索算法
数据结构·c++·算法·搜索引擎·宽度优先·图搜索算法
Captain823Jack7 小时前
【leetcode练习·二叉树拓展】归并排序详解及应用
算法·leetcode·职场和发展
查理零世7 小时前
【算法】回溯算法专题② ——组合型回溯 + 剪枝 python
python·算法·剪枝
酒酿泡芙12177 小时前
前端力扣刷题 | 6:hot100之 矩阵
前端·leetcode·矩阵