很想去的一家無人駕駛創業公司,技術面過了兩面,面試官評價也都不錯,敗在了最後的coding面上。本來還存在僥倖的心理,但還是在生日這天收到了hr拒絕的**。
很沒出息的掉了幾大滴眼淚,痛定思痛,把那天沒做出來的題目又翻出來敲了一次,發現理順了思路其實真的蠻簡單的。被拒絕也是可以理解的吧。
上圖是面試官出的題目,題目描述大致為:有乙個人被困在最中心五角星標的位置,求最短的出去的路徑是多少?每到達乙個節點的花費是節點上的數字,出去是指達到白色的沒有標數字的區域,迷宮層數不限。
一開始想用暴力搜尋來求解,面試官讓計算一下這種演算法的時間複雜度,結果是n的指數型的。後來經過面試官提醒,想到了動態規劃的求法,但是因為第一次用到巢狀vector,點之間的對應關係也很混亂,**寫得一塌糊塗,中間也多次想放棄。最後還是提交了個半成品上去,自己都不太想再看自己的**。
今天重新梳理了一下思路:不考慮往回走(這裡只是個假設,是最簡單的情況,往回走的情況等以後再思索吧),從n層裡回縮,記下與n-1層的每個節點相連的n層節點中最小的節點,一直回縮到第二層,也就是只有4個節點的層,這時候就可以比較四個元素的大小了,從而找到最小路徑和。
程式輸入為:第乙個數為迷宮層數,然後從內到外輸入迷宮的數字,每層按照順時針順序輸入,從左上角開始。上圖的輸入應該為:
3**如下:16 4 3 2
7 8 2 9 1 7 8 3
#include#include#includeusing namespace std;vector< vector> matrix; // 儲存迷宮
vectorres; // 儲存每次回縮的最小路徑
int shortest; // 最小路徑和(不包括最裡層)
void dg(int layer_num)
); return;
} int i = layer_num;
for (int j = 0; j < 4 * i; j++)
); res[j] = minx + matrix[i][j];
continue;
} int x = (j - 1) / i; // 利用x從而簡化n層與n-1層點的對應關係
if (j%i == 0) // 三個角(除去第乙個點)所連的外層有三個點
);} else // 內點所連的外層有兩個點
);} res[j] = minx + matrix[i][j]; // 將n層的最小值回縮並加到第n-1層上
} dg(i - 1); //遞迴
}int main()
for (int j = 0; j < 4 * i; j++)
} matrix.push_back(layer);
layer.clear();
} dg(matrix.size() - 2);
cout << shortest + matrix[0][0]<< endl;
return 0;
}
記錄一次redis啟動失敗
解決方法 1 win r 開啟命令列 2 cd至redis目錄,例如 d redis 3 輸入 redis server.exe redis.windows.conf 觀察是否如圖1 至此,已成功 否則,繼續進行如下操作 4 若啟動redis出現 當前日期 creating server tcp l...
記錄一次失敗的Git操作
在進行素質三連 git add a git commit m up git push檢視日誌,發現是檔案太大了 然後突然發現自己的ignore沒有新增,返過去新增,此處有乙個坑 在配置完gitignore之後還是無法忽略,此處應該執行乙個素質三連之後就可以了 git rm r cached git ...
記錄一次失敗的流水燈實驗
貧僧最近在學stm32f4啊。最基本的當然是控制io口,所以就來搞led了。最先搞的是點亮led燈,然後我照著教程用cubemx生成了 檔案,然後高高興興地去敲 終於敲完了,結果燒錄進去發現沒亮。檢查了一下編譯器發現是沒勾選上reset and run。結果貧僧就這樣天真的以為配置沒出問題,開開心心...