739 每日温度【python3】

文章讨论了如何使用Python解决dailyTemperatures问题,给出了两种方法:一种是暴力搜索,但可能会导致超时;另一种是利用栈的数据结构,提高了效率。代码实现了从给定的温度列表中找出每一天需要等待多久才能遇到更高的温度。

题目

代码&思路

暴力解法-用例通过35/48

超时

class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        L=[]
        n=len(temperatures)
        for i in range(n-1):
            flag=0 # 这个更高温是否出现了
            for j in range(i+1,n):
                if temperatures[j]>temperatures[i]:
                    flag=1
                    break
            if flag==0:
                L.append(0)
            else:
                L.append(j-i)
        # 最后一天之后不会再有最高温出现
        L.append(0)

        return L

栈运用

类似表达式求值,从左往右遍历temperatures,栈为空时则入栈。
否则对比当前遍历的温度和栈顶温度,如果当前遍历温度更大,则找到了栈顶温度所处天数的下一个更高温度,可以更新数据。之后当前栈顶出栈,以此类推。直到栈顶温度不小于当前遍历的温度,那么当前遍历的温度所在的天数入栈。

class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        stack=[] # 记录第几天
        n=len(temperatures)
        L=[0]*n

        for i in range(n): 
            if stack==[]:
                stack.append(i)
            else:
                for day in reversed(stack):
                    if temperatures[day]<temperatures[i]:
                        L[day]=i-day
                        stack.pop()
                    else:
                        break
                stack.append(i)    

        return L
### 使用Python的随机森林算法进行地表温度预测 #### 数据准备阶段 为了有效地使用随机森林算法来进行地表温度预测,前期的数据准备工作至关重要。这包括但不限于收集有关地理位置、时间戳以及其他可能影响温度的因素的信息,比如湿度、风速等环境变量。这些数据可以通过传感器网络获取或者从公开数据库下载。 对于具体操作,在读取和清洗原始数据方面可以依赖`pandas`库提供的强大功能[^1]: ```python import pandas as pd # 加载CSV文件到DataFrame对象中 data = pd.read_csv(&#39;temperature_data.csv&#39;) # 查看前几行记录以确认加载成功并初步了解数据结构 print(data.head()) ``` #### 特征工程环节 特征工程技术能够帮助提高模型性能,通过创建新的特征或将现有特征转换成更适合的形式来增强输入给定的学习器的能力。针对地表温度这一特定应用场景而言,除了直接使用的观测值外,还可以考虑加入一些衍生指标作为额外维度,例如日较差(Daily Temperature Range, DTR),即每日最高温和最低温之差;季节性因子等等。 此外,考虑到地理因素的影响不可忽视,因此建议引入经纬度坐标系下的位置信息作为辅助解释变量之一。如果适用的话,也可以尝试融合遥感影像资料中的植被覆盖程度等相关要素进来共同构成最终训练集的一部分[^2]。 #### 构建与调参过程 当准备好高质量且具有代表性的样本集合之后,则可着手于建立基于Scikit-Learn框架之上实现的RandomForestRegressor实例,并对其进行超参数优化以便获得最佳拟合效果。下面给出了一段简单的示范代码片段展示如何完成上述任务: ```python from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error # 将数据划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 初始化随机森林回归器 rf_model = RandomForestRegressor(random_state=42) # 定义网格搜索范围内的候选参数组合字典 param_grid = { &#39;n_estimators&#39;: [50, 100, 200], &#39;max_depth&#39;: [None, 10, 20, 30], } # 创建GridSearchCV对象执行交叉验证寻找最优解 grid_search = GridSearchCV(estimator=rf_model, param_grid=param_grid, cv=5, scoring=&#39;neg_mean_squared_error&#39;) grid_search.fit(X_train, y_train) best_rf = grid_search.best_estimator_ # 预测新数据点上的目标值并向用户提供反馈 predictions = best_rf.predict(X_test) mse = mean_squared_error(y_test, predictions) print(f&#39;Mean Squared Error on Test Set: {mse:.4f}&#39;) ``` #### 结果解读部分 经过一系列预处理步骤后所得到的结果不仅限于数值型输出本身——更重要的是从中挖掘出潜在规律性和模式化倾向。借助matplotlib或其他可视化工具绘制图表有助于更直观地呈现变化趋势和发展态势,从而为进一步研究提供依据和支持[^3]。 ```python import matplotlib.pyplot as plt plt.figure(figsize=(8,6)) plt.scatter(range(len(predictions)), predictions, c=&#39;blue&#39;, label="Predicted Values") plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color=&#39;red&#39;) # 对角线表示完美匹配的情况 plt.xlabel(&#39;Index of Samples&#39;) plt.ylabel(&#39;Temperature (°C)&#39;) plt.title(&#39;Comparison Between Predictions and Actuals&#39;) plt.legend() plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值