力扣739:每日温度【C++】

题目分析

原题:
请根据每日气温列表,重新生成一个列表,对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
分析:
这道题的题意并不难理解,对于输入列表的每一个元素,从下标大于其下标的元素中寻找第一个大于它的值,并记录下标之差,最后将所有下标之差返回。

思路分析

思路一:暴力查找

通过分析题意,最好想到的方法就是暴力查找。其具体思路是:
第一步:创建一个容器v用于装填输出。若输入为空直接返回v。

第二步:既然是对于输入列表的每一个元素,那么考虑通过for循环遍历输入的vector容器。因为最后一个元素对应的输出一定是0,因此只需遍历T.size()-1个元素。

遍历过程中,设置并初始化一个int类型变量target为i+1,这个target变量的作用是指示所有下标大于当前元素下标的元素,因此下标从i+1开始是完全可以的。

通过设置while循环,将T[i]与之后的所有元素作比较,直至找到大于T[i]的那个元素。当然这个元素是不一定存在的,因此,在while循环的条件中需要添加一个边界条件target<T.size()。退出循环的条件是target>=T.size()||T[target]>T[i],两个条件一个对应着没找到,一个对应着找到了。可以通过分类讨论将0或target-i放入vector容器。这里通过三目运算符v.push_back(target<T.size()?target-i:0);完成。

这里有一个特别需要注意的点:while循环两个条件的先后顺序设置是不能调换的,我在这里也是犯了这样的错误,对于这一语句while(target<T.size()&&T[target]<=T[i]),一开始“&&”符号前后的条件语句我是写反了的,这样就导致了先访问T[target],再限定target<T.size(),导致在某个测试用例的调试过程中出现了数组溢出的情况,即 ==42==ERROR: AddressSanitizer: heap-buffer-overflow on address这一debug的产生。在焕杰同学的帮助下,overcome了这一debug。

关于这一debug大家可以看我的博客Debug:ERROR: AddressSanitizer: heap-buffer-overflow on address【C++】

思路一代码如下:


class Solution {
   
public:
    vector<int> dailyTemperatures(vector<int>
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值