用友 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届秋招笔面经#

巨人网络公司福利 91人发布
