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

参考资料

相关推荐
yadanuof3 分钟前
leetcode hot100 图论
leetcode·深度优先·图论
---yx89897828 分钟前
数字人系统源码---v10技术五大底层架构链路全局开发思路
算法·架构·数字人·数字人源码·数字人系统
xiao--xin35 分钟前
LeetCode100之二叉搜索树中第K小的元素(230)--Java
java·算法·leetcode·二叉树·树的统一迭代法
路飞雪吖~37 分钟前
数据结构 && 常见的排序算法
数据结构·算法·排序算法
手握风云-41 分钟前
Java数据结构第二十一期:解构排序算法的艺术与科学(三)
数据结构·算法·排序算法
爱吃柠檬呀1 小时前
《C陷阱与缺陷》读书笔记(一)
c语言·开发语言·算法·《c陷阱与缺陷》·编写程序
壮志凌云1 小时前
配对样本t检验
算法
fqsword2 小时前
C++ 算法竞赛STL以及常见模板
c++·算法
曦月逸霜2 小时前
第五次CCF-CSP认证(含C++源码)
数据结构·c++·算法·ccf-csp
机器学习社区2 小时前
QwQ-32B 开源!本地部署+微调教程来了
深度学习·算法·面试·大模型·面试题