当前位置: 首页 > news >正文

响应式商城网站手机网页游戏排行榜前十

响应式商城网站,手机网页游戏排行榜前十,wordpress 分页插件,长沙公司网站建立题目 739. 每日温度 - 力扣(LeetCode) 思路 这道题是关于寻找每日温度之后何时会出现更高温度的问题。 首先,我会分析题目的本质:对于温度数组中的每个元素,我们需要找到它右边第一个更大的元素,并计算…

题目

739. 每日温度 - 力扣(LeetCode)

思路

这道题是关于寻找每日温度之后何时会出现更高温度的问题。

首先,我会分析题目的本质:对于温度数组中的每个元素,我们需要找到它右边第一个更大的元素,并计算它们之间的距离。这很符合单调栈的应用场景。

我的解题思路是:

  • 创建一个结果数组,初始化为全0
  • 维护一个单调递减栈,存储温度的索引(不是温度值本身)
  • 从左到右遍历温度数组:
  • 当当前温度高于栈顶索引对应的温度时,说明找到了栈顶元素的下一个更高温度
  • 计算两者的索引差,更新结果数组
  • 不断弹出栈顶并更新,直到栈为空或栈顶温度大于等于当前温度
  • 将当前索引压入栈

示例 `temperatures = [73,74,75,71,69,72,76,73]` 一步步演示单调栈的处理过程:

1. 初始化:
   - 结果数组 `answer = [0,0,0,0,0,0,0,0]`
   - 空栈 `stack = []`

2. 遍历温度数组:
   
   - i=0,温度=73:
     - 栈为空,直接压入 stack = [0]
   
   - i=1,温度=74:
     - 74 > 73,栈顶元素0对应的温度比当前温度小
     - 弹出栈顶0,计算 answer[0] = 1-0 = 1
     - stack = [1]
   
   - i=2,温度=75:
     - 75 > 74,栈顶元素1对应的温度比当前温度小
     - 弹出栈顶1,计算 answer[1] = 2-1 = 1
     - stack = [2]
   
   - i=3,温度=71:
     - 71 < 75,直接压入
     - stack = [2,3]
   
   - i=4,温度=69:
     - 69 < 71,直接压入
     - stack = [2,3,4]
   
   - i=5,温度=72:
     - 72 > 69,弹出栈顶4,计算 answer[4] = 5-4 = 1
     - 72 > 71,弹出栈顶3,计算 answer[3] = 5-3 = 2
     - 72 < 75,压入5
     - stack = [2,5]
   
   - i=6,温度=76:
     - 76 > 72,弹出栈顶5,计算 answer[5] = 6-5 = 1
     - 76 > 75,弹出栈顶2,计算 answer[2] = 6-2 = 4
     - stack = [6]
   
   - i=7,温度=73:
     - 73 < 76,直接压入
     - stack = [6,7]

3. 遍历结束,最终结果:
   - answer = [1,1,4,2,1,1,0,0]

关键点是:
- 我们始终保持栈中温度是单调递减的
- 每当遇到更高的温度,我们就找到了之前较低温度的"下一个更高温度"
- 栈中存的是索引而非温度值,这样可以方便计算天数差值
- 最终栈中剩下的索引对应的温度,就是那些在其右侧没有更高温度的日子

时间复杂度是O(n),因为每个元素最多入栈出栈各一次;空间复杂度也是O(n),用于存储栈和结果数组。

读者可能出现的错误写法

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> st;vector<int> answer(temperatures.size(),0);if(int i =0;i<temperatures.size();i++){if(st.size() && temperatures[i] > temperatures[st.top()]){answer[st.top()] = i-st.top();st.pop();}st.push(i);}return answer;}
};

只处理一个栈顶元素:代码中使用if而不是while,意味着每次迭代只会处理一个栈顶元素,然后直接入栈,这会导致:

  • 当一个高温度出现时,无法处理栈中所有受影响的元素
  • 栈不能保持单调性

正确写法

vector<int> dailyTemperatures(vector<int>& temperatures) {int n = temperatures.size();vector<int> answer(n, 0);stack<int> st;for (int i = 0; i < n; i++) {while (!st.empty() && temperatures[i] > temperatures[st.top()]) {int prevIdx = st.top();st.pop();answer[prevIdx] = i - prevIdx;}st.push(i);}return answer;}
http://www.dtcms.com/a/446997.html

相关文章:

  • 长沙网站建设kaodezhu上海制作网站多少钱
  • 做网站要找什么软件佛山营销网站建设
  • 点估计与置信区间及假设检验详解
  • 苏州好的做网站的公司主题猫-wordpress
  • 网站空间流量轻定制网站建设
  • List\Tuple\Set 这些数据类型大写和不大写
  • 做一个免费网站的流程郑州网站建
  • 李宏毅机器学习笔记16
  • 建网站的几个公司iis 设置此网站的访问权限
  • 网站需要域名吗为何网站打不开
  • 企业品牌网站营销网站改版后百度不收录
  • 2025年实用大模型工具清单
  • 网站定制开发上海建设网站费用
  • 黔东南州住房和城乡建设局网站石家庄商城网站建设
  • 【循环神经网络6】LSTM实战——基于LSTM的IMDb电影评论情感分析
  • 数据库原理及应用_第3篇数据库设计_第9章关系模型规范化设计理论_关系模式规范化
  • wordpress网站 添加微信支付专注郑州网站建设
  • 自己做网站平台淘宝客网站如何做推广
  • fastboot getvar all 输出完整解析
  • 动易cms网站后台很慢是什么原因asp网站首页
  • 上高做网站公司公司简介ppt内容
  • 基于ssh架构网站开发宣传推广方案怎么写
  • unity网站后台怎么做百度网站数据统计怎么做
  • Coduck模拟三
  • 用户建立自己的数据类型
  • 360 的网站链接怎么做腾讯cdc用wordpress
  • 给男票做网站表白的软件企业网站首页应如何布局
  • 网站建设前端网站建设与维护百科
  • 英文服装商城网站建设苏中建设官方网站
  • 哪个网站可以做身份核验网站 扩展