class Solution {
public List<Integer> findBuildingViewCount(int[] heights) {
int n = heights.length;
if (n == 1) return Collections.singletonList(0);
List<Integer> leftView = new ArrayList<>();
List<Integer> rightView = new ArrayList<>();
int left = 0, right = n - 1;
leftView.add(left);
rightView.add(right);
while (left < right) {
if (heights[left] < heights[right]) {
if (heights[left] > heights[leftView.get(leftView.size()-1)]) {
leftView.add(left);
}
left++;
} else {
if (heights[right] > heights[rightView.get(rightView.size()-1)]) {
rightView.add(right);
}
right--;
}
}
// Merge rightView in correct order (from rightmost to leftmost)
while (!rightView.isEmpty()) {
leftView.add(rightView.remove(rightView.size()-1));
}
return new ArrayList<>(leftView);
}
}
Comments
0 B
|0 👍
/0 👎
0 B
|👍
/👎