原题

有 n 座建筑物。给你一个大小为 n 的整数数组 heights 表示每一个建筑物的高度。

建筑物的右边是海洋。如果建筑物可以无障碍地看到海洋,则建筑物能看到海景。确切地说,如果一座建筑物右边的所有建筑都比它 矮 时,就认为它能看到海景。

返回能看到海景建筑物的下标列表(下标 从 0 开始 ),并按升序排列。

 

示例 1:

输入:heights = [4,2,3,1]
输出:[0,2,3]
解释:1 号建筑物看不到海景,因为 2 号建筑物比它高
示例 2:

输入:heights = [4,3,2,1]
输出:[0,1,2,3]
解释:所有的建筑物都能看到海景。
示例 3:

输入:heights = [1,3,2,4]
输出:[3]
解释:只有 3 号建筑物能看到海景。
示例 4:

输入:heights = [2,2,2,2]
输出:[3]
解释:如果建筑物右边有相同高度的建筑物则无法看到海景。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/buildings-with-an-ocean-view
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

简单题

代码

package leetcode.Algorithms;

import java.util.ArrayList;
import java.util.List;

public class Solution_1762 {
    public static void main(String[] args) {
        int[] heights = {4, 2, 3, 1};
        findBuildings(heights);
    }

    public static int[] findBuildings(int[] heights) {
        List<Integer> list = new ArrayList<>();
        list.add(heights.length-1);
        int max = heights[heights.length - 1];
        for (int i = heights.length - 1; i >= 0; i--) {

            if (heights[i] > max) {
                list.add(i);
                max = heights[i];
            }
        }
        Integer[] array = list.toArray(new Integer[list.size()]);
        int[] re = new int[array.length];
        int j=0;
        for (int i = array.length-1; i >=0 ; i--) {
            re[j] = array[i];
            j++;
        }

        return re;

    }
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐