pat-554. 磚牆

pessiboy發表於2020-11-22

在這裡插入圖片描述
在這裡插入圖片描述

解釋:
我們找出每一道的空襲,比如在上面我們可切出如下的空襲,然後我們記錄在雜湊表上面去。然後我們選取出點最多的那個空隙,選出他的對裡面,然後就是刀刃碰到最小的次數
在這裡插入圖片描述
程式碼如下:
在儲存座標的時候,從起始點開始然後儲存每個空襲的長度,然後依次往後面去進行相加,此放入和雜湊表裡面去。
可能我說其實還是很亂很亂我做出一個解釋,將上面的磚塊做出一個投影,投影在x軸上面:

10)(30)(50)
(30)(40)
(10)(40)
(20)
(30)(40)
(10)(40)(50

顯然(4,0)這個垂直位置上面的空隙更多,那麼碰到的磚塊那麼就更少

class Solution {
public:
    int leastBricks(vector<vector<int>>& wall) {
        //建立雜湊表。統計出一共有多少個縫,最後取出一個對立面
        //int len=wall[0].size();//就是表示的是橫向的長度
        unordered_map<int,int> hash;
        for(auto& c:wall){
            //記錄每一個點還要去記錄標記
            for(int i=0,s=0;i<(int)c.size()-1;i++){
                s+=c[i];
                hash[s]++;
            }
        }
        //然後找出空襲最多的那麼個點——直接用雜湊表的for-each迴圈
        int res=0;
        //直接取出鍵對應的值的值
        for(auto [k,v]:hash){
            res=max(res,v);
        }
        return wall.size()-res;
    }
};

相關文章