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

news/2025/2/4 16:04:12 标签: leetcode, swift, 算法

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

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

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括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 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)
]

输出结果

[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.niftyadmin.cn/n/5841659.html

相关文章

[ Spring ] Spring Boot Mybatis++ 2025

文章目录 StructureMyBatis Controller AbilitiesConfigure Plugins and RepositoriesApply Plugins and Add DependenciesMyBatis Spring PropertiesMyBatis ApplicationMyBatis BeansMyBatis MapperMyBatis Query Builder Structure this blog introduce 3 ways using mybat…

本地部署运行一下deepseek r1尝鲜

2025-01-20正式发布 DeepSeek-R1&#xff0c;并同步开源模型权重。 DeepSeek-R1 遵循 MIT License&#xff0c;允许用户通过蒸馏技术借助 R1 训练其他模型。 DeepSeek-R1 上线API&#xff0c;对用户开放思维链输出&#xff0c;通过设置 modeldeepseek-reasoner 即可调用。 Dee…

第五章:元婴-React用户功能实战

文章目录 登录页面布局JWT 令牌鉴权用户功能实现用户查询页面用户更改状态用户添加页面用户添加页面表单构建用户编辑页面用户编辑表单页面登录页面布局 import React, { useEffect, useState } from react import { Button, Form, Input, message } from antd import style fr…

使用 Grafana 和 Prometheus展现消息队列性能

引言 上篇文章通过JMX提取Kafka数据&#xff0c;本篇文章将通过JDBC存储Kafka性能数据存储于数据库&#xff0c;并通过Grafana 和 Prometheus进行展示&#xff0c;实现开发中常用的可视化监控 1. 环境准备 Kafka&#xff1a;运行中的 Kafka 集群&#xff0c;确保可以…

【Word快速设置论文公式居中编号右对齐】

1. 查看纸张大小 布局 —> 纸张大小 —> 21厘米*29.7厘米 —> 得到宽度为21厘米 2. 查看左右的页边距 布局 —> 页边距 —> 1.57厘米和1.57厘米 3. 计算距离 公式的距离&#xff1a;&#xff08;21-1.57-1.57&#xff09;/2 8.93厘米 编号靠右的距离&…

【教程】微信扫描二维码进入小程序指定页面并携带参数

功能描述 打开微信扫一扫&#xff0c;扫描产品上的二维码&#xff0c;弹出小程序&#xff0c;跳到“邀请用户”页面。解析二维码中的参数&#xff0c;自动填充到页面中的“邀请码”输入框。 操作步骤 首先&#xff0c;要到微信公众平台对扫普通链接二维码打开小程序功能进行配…

MATLAB | 基于长时间序列栅格数据的Mann-Kendall与Pettitt突变检验分析

各位同学好&#xff0c;今天我们将分享在水文气象等领域中常用的两种突变检验方法——Mann-Kendall&#xff08;MK&#xff09;检验和Pettitt检验。由于时间关系&#xff0c;今天我们不详细介绍具体的公式和推导过程&#xff0c;感兴趣的同学可以参考相关文献&#xff0c;如《P…

自然语言生成(NLG)算法模型评估方案的硬件配置、系统架构设计、软件技术栈、实现流程和关键代码

智能化对话中的自然语言生成&#xff08;NLG&#xff09;算法模型评估是一个复杂而多维的过程&#xff0c;它涉及多个评估指标和策略&#xff0c;以确保生成的文本质量、准确性和流畅性。 智能化对话中的NLG算法模型评估是一个涉及多个评估指标和策略的过程。通过选择合适的评估…