LeetCode-739. 每日温度

青旅半醒 2022-03-15 14:47 368阅读 0赞

739. 每日温度

根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30, 100] 范围内的整数。

  1. static const auto io_sync_off=[](){
  2. std::ios::sync_with_stdio(false);
  3. std::cin.tie(nullptr);
  4. return nullptr;
  5. }();
  6. class Solution {
  7. public:
  8. vector<int> dailyTemperatures(vector<int>& T) {
  9. vector<int> vec(T.size(),0);
  10. int i=0,j=0;
  11. while(i<T.size())
  12. {
  13. if(j>=T.size())
  14. {
  15. i++;
  16. j=i+1;
  17. }
  18. else if(T[j]>T[i])
  19. {
  20. vec[i]=j-i;
  21. i++;
  22. j=i+1;
  23. }
  24. else
  25. {
  26. j++;
  27. }
  28. }
  29. return vec;
  30. }
  31. };

建立一个递减栈,保存数组元素的下标。

  1. 当前元素小于栈顶元素,两个下标做差,并入栈
  2. 当前元素大于等于栈顶元素,弹出栈顶元素

    static const auto io_sync_off={

    1. std::ios::sync_with_stdio(false);
    2. std::cin.tie(nullptr);
    3. return nullptr;

    }();
    class Solution {
    public:

    1. vector<int> dailyTemperatures(vector<int>& T) {
    2. const int n = T.size();
    3. stack<int> s;
    4. vector<int> vec(n);
    5. for(int i=n-1;i>=0;i--)
    6. {
    7. while(!s.empty()&&T[s.top()]<=T[i])
    8. {
    9. s.pop();
    10. }
    11. vec[i]=s.empty()?0:s.top()-i;
    12. s.push(i);
    13. }
    14. return vec;
    15. }

    };

发表评论

表情:
评论列表 (有 0 条评论,368人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode739. 每日温度

    给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer\[i\] 是指对于第 i 天,下一个更高温度出现在几天后。如果气

    相关 LeetCode 739. 每日温度

    根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 tem

    相关 LeetCode 739每日温度

    题目描述 请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

    相关 LeetCode-739. 每日温度

    [739. 每日温度][739.] 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。