1. 程式人生 > 其它 >1564. Put Boxes Into the Warehouse I

1564. Put Boxes Into the Warehouse I

技術標籤:Greedyleetcode

Lc-1564
categories: [LeetCode]
tags: [Greedy, medium]

1564. Put Boxes Into the Warehouse I

題目大意:

給定兩個陣列,一個代表盒子,一個代表倉庫,
倉庫和盒子中的元素都代表高度,寬度為一個unit
求出最多有多少個盒子可以放入倉庫
注意的是:盒子放入倉庫只能從倉庫左邊進入也就是0-index
盒子不能堆放,但可以隨意調整盒子進入倉庫的順序

解題思路:

這是一道典型的貪心演算法題, 首先我們需要對盒子的陣列進行排序找出最高的盒子
然後用for loop 開始將最高的盒子和倉庫中的每個倉庫從左到右一一比較
如果發現當前倉庫可以放下最高的盒子,那麼結果加一,然後將倉庫的下標挪到下一個
無論當前倉庫是否能放下當前最高的盒子,每次迴圈完,盒子的下標自動挪到下一個盒子
最後返回結果

注意:

None

複雜度:

Time Coplexity: O(NlogN + M)

Code示例:

class Solution {
    public int maxBoxesInWarehouse(int[] boxes, int[] warehouse) {
        Arrays.sort(boxes);
        
        int b = boxes.length-1;
        int ans = 0;
        
        for (int i = 0; i < warehouse.length && b >= 0;) {
            if (warehouse[i] >= boxes[b]) {
                ans++;
                i++;
            }
            b--;
        }
        return ans;
    }
}