用友 09.09 看大楼数量单调栈
public static int[] findBuilding(int[] heights) { // write code here Stack<Integer> st = new Stack<>(); Stack<Integer> st1 = new Stack<>(); int[] left = new int[heights.length]; int[] right = new int[heights.length]; int[] res = new int[heights.length]; Arrays.fill(res, 1); for (int i = 0; i < heights.length; i++) { while (!st.isEmpty() && heights[i] >= heights[st.peek()]) { Integer peek = st.peek(); st.pop(); left[peek] = st.size(); } st.push(i); } for (int i = heights.length - 1; i >= 0; i--) { while (!st1.isEmpty() && heights[i] >= heights[st1.peek()]) { Integer peek = st1.peek(); st1.pop(); right[peek] = st1.size(); } st1.push(i); } for (int i = 0; i < heights.length; i++) { if (i == 0) { res[i] += right[i + 1] + 1; } else if (i == heights.length - 1) { res[i] += left[i - 1] + 1; } else { res[i] += left[i - 1] + right[i + 1] + 2; } } return res; }
#用友##23届秋招笔面经#