DevOps技能樹知識整理 |【筆記目錄】
前言這裡紀錄 DevOps 面試常見的知識點,主要是參考了這個 github repository: DevOps Exercises 所做的筆記整理
可能會花很久時間才能夠全部整理完成~
DevOps GeneralPython
Basic Data Types
OOP / Class
Raise Exceptions
Regex
Async
File Manipulation
OS
lambda
decorator
Flask
文章: [Python for DevOps |【DevOps技能樹】]
Networking
TCP/UDP
OSI Model
CIDR
Mac Addr.
CSMA/CD
NAT
DNS
ICMP
TLS/SSL Handshake
Route Table
ARP
DHCP
VLAN
SDN
Confi ...
入室搶劫問題 | Medium | LeetCode#198. House Robber
題目敘述
題目難度: Medium
題目描述: 題目假設你是一個專業的竊賊,街上的屋子都有一筆現金,在街上挨家挨戶的入室竊盜,但如果你偷了相鄰兩間屋子就會觸發自動警報報警,你就會被抓。給定一個整數陣列 nums 代表街上每間屋子藏有的錢有多少,請回傳竊賊在不觸發警報的狀況下,可以偷到最大數目的金額。
解法一開始的想法我的想法就是,其實就是要找一個陣列 除了相鄰元素外彼此的相加的所有可能組合當中的最大和。舉例來說,給定 nums={2,7,9,3,1},那非相鄰的所有可能組合如下:
123452,9,1 => 122,3 => 57,3 => 107,1 => 89, 1 => 10
這當中數值最大的和為 12,而因此有了下面的遞迴做法
錯誤解法12345678910111213class Solution {public: ...
最小成本爬樓梯問題 | Easy | LeetCode#746. Min Cost Climbing Stairs
題目敘述
題目難度: Easy
題目敘述: 題目給定一個整數陣列 cost,其中 cost[i] 代表通過第 i 階所需要的成本,一旦付完成本後,就可以再度選擇走一階還是兩階直到到達階梯頂端。題目也有說明,起點也可以選第一階 (index=0) 或者第二階 (index=1) 開始。這題的最終目標要求的是到達頂端所需要的最小成本是多少。
解法一開始的想法這題是基於 LeetCode 76. Climbing Stairs 的延伸問題。那這題根據題目給的例子,假設 cost=[10,15,20] 由於初始可以選第一階或第二階,而所有走法如下:
123410, 15, 20 = 45 (每次走一階)10,20 = 30 (先走一步再一次跨兩階)15, 20 = 35 (起點在第二階,然後再走一階)15 (起點 ...
爬樓梯問題 | Easy | LeetCode#70. Climbing Stairs
題目敘述
題目難度:Easy
題目敘述:題目描述要爬階梯,需要 n 階可以到頂端,每次可以跨一步或是兩步,有多少種爬到頂端的方式?
解法一開始的想法首先要先思考這題的遞迴關係,任意階的步驟數,會是由什麼組成?
這裡可以觀察到如果 n=1 也就是往上一層有幾種走法,答案就是 1 因為只能走一步,那 n=2 這時就可以選擇走兩次一步 [1,1] 或者是一次走兩步 [2],也就是有兩種選擇,那若 n=3 呢? 往上三階其實就是往上一階和往上兩街的組合,因此他們對應的走法數量也會是 n=1 和 n=2 的加總
1234n=1 | output1=1n=2 | output2=2n=3 = 2+1 | output= output1+ output2
因此可以總結遞回式為 $F(n) = F(n-1) + F(n-2)$,把它寫成程式如下:
123456int climbStai ...
刷題知識整理 | 動態規劃 Dynamic Programming(DP)
前言從還沒開始刷題前就耳聞了DP題目的恐怖,因此想說在實際開始刷類似題目前整理一下DP的知識。
在閱讀網路資料的時候發現這篇文章解釋得很好,因此非常推薦先閱讀這篇 文章,作者有提到要理解 DP,耐心很重要,然後還需要熟悉遞迴,因為DP問題通常會用遞迴來解決
甚麼是 Dynamic Programming(DP)?這裡我必須提到上面那篇文章說的結論: Dynamic Programming 是一種用來幫助遞迴程式碼更加有效率的工具,所以文章作者也認為不該在面對一個問題的時候就先去識別這個問題是否是一個 DP問題,而是先判斷是否需要用到遞迴,而在遞迴的基礎上,會延伸思考到這個遞迴程式碼可能會很冗,因此有答案應該會有改善空間,而改善的方式就透過 Dynamic Programming
DP 是用來改善現有 Solution 的方式 !
接下來介紹使用這個工具的步驟,其中包含了4個步驟,這 ...
重新排序鏈結 | Medium | LeetCode#143. Reorder List
題目敘述
題目難度: Medium
題目敘述: 題目給定一個 single linked list,L0 → L1 → … → Ln - 1 → Ln 請將這個 list 重組成 L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 在這當中請不要改動節點值。
解法一開始的想法
由於排序看起來像是把一個 linked list 頭尾對折然後再交互連接,因此我的想法會是先找到鏈結的中間節點,再將其拆分成兩個 list,之後將後半部分的 list 進行反序排列,接著再跟前半部分的list交互排列。
我的解法12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152/** * Definition for singly-linked ...
刪除從鏈結末端第N個節點 | Medium | LeetCode#19. Remove Nth Node From End of List
題目敘述
題目難度:Medium
題目敘述: 給定一個 Linked List 的 head,移除從尾端數來第 n 個節點,並返回list
解法一開始的想法最直覺的做法就是,先取得 list 長度,再用長度扣掉 n 得到的數字假設是 m,就要被刪除的就是從首端往後數的第 m 個節點。 刪除節點這部分也很基本,那就是透過一個 pointer 指向要被刪除節點指向的下一個節點位址,在讓待刪除節點的前一個節點指向這個 pointer,最後返回 head
我的解法123456789101112131415161718192021222324252627282930313233343536373839404142434445/** * Definition for singly-linked list. * struct ListNode { * int val; * ...
回文分割 | Medium | LeetCode#131. Palindrome Partitioning
題目敘述
題目難度: Medium
題目敘述:給定字串 s,分割字串使其所有子字串都是 回文(Palindrome) ,並回傳所有可能的分割結果
回文(Palindrome) 代表字串從左往右讀的結果跟從右往左讀的結果一樣。
解法一開始的想法這題的想法一樣會是 backtracking,主要會需要去分割每個字串,意思是將不同字串組合加入到某個字串變數中,接著需要檢查該字串組合是否是回文,如果不是,那就繼續嘗試其他字串組合,如果是回文,那就將該字串組合添加到子陣列中,並且進入下一層遞迴。 遞迴終止條件就是當前遞迴深度已經達到題目給的字串長度
到目前爲止的想法都蠻正確的,但這次主要會是在字串分割還有字串反轉,我其實還沒刷對應題目,因此要怎麼樣在Leetcode 中快速做到,是這題中學習的
我的解法123456789101112131415161718192021222324252 ...
字詞模式 | Easy | LeetCode#290. Word Pattern
題目敘述
題目難度: Easy
題目描述: 給定字串 pattern 以及 字串 s,檢查 s 是否遵循相同模式
題目有說明這裡 相同模式 的意思: pattern 中的任一字元與 s 中的非空字串完全匹配的 1對1映射關係,具體來說規則如下:
在 pattern 中的每個字母,都有明確的對應到 s 中的 unique 字串
在 s 中的 unique 字串,明確對應到 pattern 中的一個字母
沒有兩個字母映射到同一個單詞,也沒有兩個單詞映射到同一個字母
解法一開始的想法這裡想法很單純就是透過 Hash Table 來去建立並儲存映射關係。而在建立過程中可以去檢查當前的字母和對應字串是否已經存在映射關係於 hash table 中,如果有救回傳 false,如果整個 hash table都建立好後都沒有重複的映射關係那就回傳 true。
我的解法12345678910 ...