题解 | #牛的生长情况#

牛的生长情况

https://www.nowcoder.com/practice/5f67258999bd4e61a361f4d3017a3fd4

题解 | 牛的生长情况

语言: C++

知识点: 单调栈

分析: 本题要求之后第一个比当前数大的数的位置,因此可以维护一个单调递减的栈,又因为最终返回的是数字之间的距离,因此栈中存储的应该是当前体重的下标(注意此处的单调递减是指栈中下标所对应的体重值单调递减,而非栈中下标值单调递减)。之后在遍历过程中若遇到当前体重大于栈顶下标所对应的体重时,则当前下标减去栈顶下标即为栈顶下标处的结果(栈顶下标处体重到下一个大于它的体重的距离),然后将栈顶弹出继续和新的栈顶比较,直到满足该元素入栈后栈中可以单调递减为止。最终遍历完成即可返回结果集(注意题目要求后面找不到大于的要返回-1,因此结果集要初始化为-1)。

代码实现:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param weights int整型vector 
     * @return int整型vector
     */
    vector<int> weightGrowth(vector<int>& weights) {
        stack<int> sk;
        vector<int> res(weights.size(), -1); // 结果集初始化为-1
        for(int i = 0; i < weights.size(); i++)
        {
            while(!sk.empty() && weights[i] > weights[sk.top()])
            {
                res[sk.top()] = i - sk.top();
                sk.pop();
            }
            sk.push(i);
        }
        return res;
    }
};
全部评论

相关推荐

02-22 21:16
已编辑
门头沟学院 运营
牛客928043833号:离了你谁还拿我当个宝
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务