Java 题解 | #牛的生长情况#

牛的生长情况

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param weights int整型一维数组
     * @return int整型一维数组
     */
    public int[] weightGrowth (int[] weights) {
        // write code here
        int n = weights.length;
        int[] res = new int[n];
        Deque<Integer> stack = new ArrayDeque<>();

        // 遍历数组
        for (int i = 0; i < n; i++) {
            // 弹出比当前元素小的栈顶元素,并计算增长距离
            while (!stack.isEmpty() && weights[stack.peek()] < weights[i]) {
                int x = stack.pop();
                res[x] = i - x;
            }
            // 将当前元素入栈
            stack.push(i);
        }

        // 处理栈中剩余的元素,设置增长距离为-1
        while (!stack.isEmpty()) {
            res[stack.pop()] = -1;
        }

        return res;
    }
}

该代码使用的编程语言是Java。

该题表达的知识点是栈的应用。给定一个整型数组weights,要求计算出每个元素的增长距离。具体实现如下:

  1. 创建一个栈,用来保存数组中的索引。
  2. 遍历数组weights,对于每个元素:如果栈不为空并且栈顶元素对应的数组元素小于当前元素,则将栈顶元素弹出,计算弹出元素的增长距离,并将结果保存到对应的输出数组res中。将当前元素的索引入栈。
  3. 遍历完数组后,如果栈中还有剩余元素,说明这些元素没有更大的下一个元素,所以将对应的输出数组res中的值设为-1。
  4. 返回输出数组res

代码的文字解释如下:

  1. 创建一个栈stack和一个数组res,长度都为输入数组weights的长度。
  2. 遍历输入数组weights的每一个元素:如果栈不为空并且栈顶元素对应的数组元素小于当前元素,表示发现了比栈顶元素更大的元素,需要将栈顶元素弹出并计算增长距离。弹出栈顶元素的索引x。计算增长距离为当前索引i减去弹出的索引x。将计算得到的增长距离保存到输出数组res的对应位置x上。将当前元素的索引入栈。
  3. 遍历完输入数组后,检查栈是否为空:如果栈不为空,则表示栈中剩余元素没有更大的下一个元素。需要将剩余元素的增长距离设为-1,并将结果保存到输出数组res的对应位置上。
  4. 返回输出数组res作为最终的结果。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务