iT邦幫忙

2026 iThome 鐵人賽

DAY 16
1
Software Development

快樂演算法系列 第 16

yolo26m 一步錯步步錯還要修 & 236 v3怎麼好像背起來了!->347

  • 分享至 

  • xImage
  •  

① 往下搜尋前:先看現在是不是答案 / 到底了
① 往下搜尋
③ 左右合併判斷

碰到 p/q
   ↑ return

左找     右找
 ↖       ↗
  都有?
   ↓
有 → 回 node
沒有 → 回有找到的那邊
class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {          // 找出出現次數最高的 k 個數字
        unordered_map<int, int> count;                           // num → 出現次數
        count.reserve(nums.size());                              // 預留空間,減少重新配置

        for (int num : nums)                                     // 一個一個看 nums
            ++count[num];                                        // num 每出現一次就 +1

        vector<vector<int>> bucket(nums.size() + 1);             // index = 出現次數

        for (auto& [num, freq] : count)                           // 看每個 num 和它的頻率
            bucket[freq].push_back(num);                          // 把 num 放進對應頻率的 bucket

        vector<int> answer;                                      // 最後答案
        answer.reserve(k);                                       // 答案一定只需要 k 個

        for (int freq = nums.size(); freq >= 1; --freq) {        // 從最高頻率往下找
            for (int num : bucket[freq]) {                       // 看這個頻率有哪些數字
                answer.push_back(num);                            // 放進答案

                if (answer.size() == k)                           // 已經找到 k 個
                    return answer;                                // 直接結束,不再往下掃
            }
        }

        return answer;                                           // 題目保證有答案
    }
};

上一篇
yolo26m 素材太少了啦& 236 v2
系列文
快樂演算法16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
AndyAWD
iT邦新手 1 級 ‧ 2026-09-04 22:35:37

常常修完這個就天亮惹

我要留言

立即登入留言