iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
Software Development

快樂演算法系列 第 17

八字水平圓 & 347 v2 ->102

  • 分享至 

  • xImage
  •  
  1. bucket[1] = [3] // 數字 3 出現 1 次
    bucket[2] = [2] // 數字 2 出現 2 次
    bucket[3] = [1] // 數字 1 出現 3 次

3 → 1 bucket[3] 裡面是數字 1
2 → 2 bucket[2] 裡面是數字 2

bucket 的 index 就是出現次數:

bucket[1] 低頻
bucket[2]
bucket[3] 高頻

k = 要幾個答案;bucket index = 出現幾次;bucket 裡面 = 哪些數字出現這麼多次。

找 max 頻率,再填回本身數字;可能有多個數字同頻率,所以 bucket[freq] 才是 vector,不是單一 int。

3.102

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* node) {// 從最上面的 node 開始,一層一層讀 Tree
        vector<vector<int>> answer;// 最後答案:每一層是一個 vector

        if (!node)// 如果整棵 Tree 是空的
            return answer;// 直接回傳 []

        queue<TreeNode*> nodesToVisit;// Queue:存接下來要處理的 node
        nodesToVisit.push(node);// 先把最上面的 node 放進 Queue

        while (!nodesToVisit.empty()) {// Queue 還有 node 就繼續
            int levelSize = nodesToVisit.size();// 記住「目前這一層」有幾個 node
            vector<int> level;// 準備存目前這一層的數值
            level.reserve(levelSize);// 先準備這一層需要的空間

            for (int i = 0; i < levelSize; ++i) {// 只處理目前這一層
                TreeNode* currentNode = nodesToVisit.front();//取Queue最前的node
                nodesToVisit.pop();// 這個 node 已經開始處理,移出 Queue

                level.push_back(currentNode->val);// 把目前 node 的 value 放進這一層

                if (currentNode->left)// 如果有左邊 node
                    nodesToVisit.push(currentNode->left);// 放到 Queue,留給下一層處理

                if (currentNode->right)// 如果有右邊 node
                    nodesToVisit.push(currentNode->right);// 放到 Queue,留給下一層處理
            }

            answer.push_back(level);// 完成一整層後,放進答案
        }

        return answer;// 回所有層
    }
};

上一篇
yolo26m 一步錯步步錯還要修 & 236 v3怎麼好像背起來了!->347
系列文
快樂演算法17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言