LeetCode 1762. Buildings With an Ocean View

原题链接在这里:https://leetcode.com/problems/buildings-with-an-ocean-view/description/
题目:

There are n buildings in a line. You are given an integer array heights of size n that represents the heights of the buildings in the line.

The ocean is to the right of the buildings. A building has an ocean view if the building can see the ocean without obstructions. Formally, a building has an ocean view if all the buildings to its right have a smaller height.

Return a list of indices (0-indexed) of buildings that have an ocean view, sorted in increasing order.

Example 1:

Input: heights = [4,2,3,1]
Output: [0,2,3]
Explanation: Building 1 (0-indexed) does not have an ocean view because building 2 is taller.

Example 2:

Input: heights = [4,3,2,1]
Output: [0,1,2,3]
Explanation: All the buildings have an ocean view.

Example 3:

Input: heights = [1,3,2,4]
Output: [3]
Explanation: Only building 3 has an ocean view.

Constraints:

  • 1 <= heights.length <= 105
  • 1 <= heights[i] <= 109

题解:

Traverse from right to left.
Whenever encoutner a bigger value, we find an ocean view and update the maximum.

Time Complexity: O(n). n = heights.length.
Space: O(n).

AC Java:

 1 class Solution {
 2     public int[] findBuildings(int[] heights) {
 3         List<Integer> res = new ArrayList<>();
 4         int n = heights.length;
 5         int max = 0;
 6         for(int i = n - 1; i >= 0; i--){
 7             if(heights[i] > max){
 8                 max = heights[i];
 9                 res.add(i);
10             }
11         }
12 
13         int[] resArr = new int[res.size()];
14         for(int i = 0; i < res.size(); i++){
15             resArr[res.size() - i - 1] = res.get(i);
16         }
17 
18         return resArr;
19     }
20 }

AC Python:

 1 class Solution:
 2     def findBuildings(self, heights: List[int]) -> List[int]:
 3         res = []
 4         maxHeight = float('-inf')
 5         n = len(heights)
 6 
 7         for i in range(n - 1, -1, -1):
 8             if heights[i] > maxHeight:
 9                 maxHeight = heights[i]
10                 res.append(i)
11         
12         return res[::-1]
13         

类似Finding the Number of Visible Mountains.

posted @ 2024-02-29 13:13  Dylan_Java_NYC  阅读(8)  评论(0编辑  收藏  举报