题解 | #牛的生长情况#
牛的生长情况
https://www.nowcoder.com/practice/5f67258999bd4e61a361f4d3017a3fd4
知识点:单调栈
我们要找到每个元素后面的更大元素,我们可以通过使用单调栈的思想来解决,对于这类下一个更大元素的题目,都可以使用单调栈来解决,我们维护一个栈,若栈顶元素小于当前元素,则将其出栈,直至栈顶元素大于等于当前元素,或者栈为空。这样可以保证在栈内的元素弹出时,就找到了比其更大的元素,对于这道题而言,我们要在栈中存储每个元素的下标,以确保在出现下一个更大元素时,我们可以直接利用下标找到二者相隔的距离。
Java题解如下
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param weights int整型一维数组 * @return int整型一维数组 */ public int[] weightGrowth (int[] weights) { // write code here Deque<Integer> stack = new ArrayDeque<>(); int n = weights.length; int[] ans = new int[n]; Arrays.fill(ans, -1); for(int i = 0; i < n; i++) { while(!stack.isEmpty() && weights[stack.peek()] < weights[i]) { int poll = stack.poll(); ans[poll] = i - poll; } stack.push(i); } return ans; } }