题解 | #牛的生长情况#
牛的生长情况
https://www.nowcoder.com/practice/5f67258999bd4e61a361f4d3017a3fd4
大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
这道题目主要考察了如何在动态数据中找到下一个更大的值出现的位置,可以通过单调递减栈来实现。
题目解答方法的文字分析
这个问题要求我们找到对于每一天,下一个平均体重更高的牛会在几天后出现。我们可以使用单调递减栈来解决这个问题,栈中存放的是未找到下一个更高体重的牛的索引。
具体解题思路如下:
- 创建一个空栈 stk 用于存放未找到下一个更高体重的牛的索引。
- 遍历牛的平均体重数组 weights,对于每头牛的体重,我们需要将栈中比当前牛的体重小的牛的索引都弹出,因为对于这些牛来说,当前牛是第一个更高的体重。
- 将当前牛的索引压入栈中,表示未来要找到下一个更高体重的牛的位置。
- 遍历完所有的牛后,栈中剩余的牛的索引对应的位置都是没有下一个更高体重的牛,将这些位置的值设置为 -1。
本题解析所用的编程语言
本题解析所用的编程语言是C++。
完整且正确的编程代码
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param weights int整型vector * @return int整型vector */ vector<int> weightGrowth(vector<int>& weights) { vector<int> growth(weights.size(), -1); // 初始化growth数组为-1 stack<int> stk; // 单调递减栈 for (int i = 0; i < weights.size(); ++i) { while (!stk.empty() && weights[stk.top()] < weights[i]) { growth[stk.top()] = i - stk.top(); // 计算下一个更高体重的位置 stk.pop(); } stk.push(i); } return growth; } };
您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题