算法

1642-可以到达的最远建筑-贪心算法

2020-11-02  本文已影响0人  华雨欣

题目


题目给了我们砖块和梯子,梯子可以直接翻上下一座建筑,所以梯子就相当于是可以使用一次的无限块砖块,那么怎么使用梯子显然是这道题的关键

核心思路

既然梯子是关键,那么我们该怎么使用梯子才能走的更远呢?
因为梯子的数量是固定的,那么如果用完梯子还能剩下尽量多的砖块,就可以走的尽可能远了。所以我们不妨使用一个小顶堆存储所有放梯子的位置梯子所代替的砖块的数量。这样堆顶存放的就是梯子代替的最少的砖块的数量。思路如下:

完整代码

class Solution {
    public int furthestBuilding(int[] h, int bricks, int ladders) {
        PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();
        for (int i = 0; i < h.length - 1; i++) {
            if(h[i + 1] > h[i]){
                int diff = h[i + 1] - h[i];
                minHeap.add(diff);
                if(minHeap.size() > ladders){
                    bricks -= minHeap.poll();
                }
                if(bricks < 0) return i;
            }
        }
        return h.length - 1;
    }
}

这道题难度不算大,主要要想到堆的使用,然而我比赛时还是太菜,都没来得及做这题,只能下次继续努力了~
如果文章有写的不正确的地方还请指出,感恩相遇~~~

上一篇 下一篇

猜你喜欢

热点阅读