1. 程式人生 > >玩轉演算法面試-佇列Queue

玩轉演算法面試-佇列Queue

這裡寫圖片描述

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x),left(NULL),right(NULL) {}

};

class Solution {
public:
    vector<vector<int> levelOrder(TreeNode* root){
        vector
<vector<int>>
res; if( root == NULL) return res; // 合併兩個變數 https://www.cnblogs.com/lvchaoshun/p/7769003.htmls queue<pair<TreeNode*,int> >
q; q.push(make_pair( root,0)) while( !q.empty()){ // 取出第一個元素 TreeNode* node = q.front().first; // 層級
int level = q.front().second; q.pop(); // 如果等於,說明res還沒有存在level這一層(索引問題) if(level == res.size()) //將動態陣列加入到res容器的最後一位 res.push_back(vector<int>()); res[level].push_back(node->val); if( node->left) // make_pair 建立陣列對
q.push(make_pair(node->left,level + 1)); if(node->right) q.push(make_pair(node->right,level + 1)); } return res; } }; int main() { return 0; }

這裡寫圖片描述

BFS和圖的最短路徑

這裡寫圖片描述

  • 沒有解怎麼辦? 不可能,因為1也是完全平方和
  • 直覺-》貪心演算法? 從最大的完全平方和開始,依次向下查詢越來越小的完全平方和
    • 12 = 9 + 1 + 1 + 1
    • 12 = 4 + 4 + 4
    • 所以貪心演算法是不可取的

這裡寫圖片描述
這裡寫圖片描述