拆分字句 | Medium | LeetCode#139. Word Break
題目敘述 題目難度:Medium 題目描述:給定一個字串 s,以及一個字串形成的陣列 wordDict,若 s 可以被分割成一個或多個 wordDict 當中的單字序列,則回傳 True Note that the same word in the dictionary may be reused multiple times in the segmentation. 解法一開始的想法s 中的每個字元可以 選或不選,每次形成一個子字串,就去跟 wordDict 進行比較看當前子字串是否存在於 wordDict 當中,一旦嘗試過每個子字串,則回傳結果。 我的解答1234567891011121314151617181920212223242526class Solution {public: vector<int> dp; bool helper(string s, int start, vector<string>& wordDict){ if(start == s.length())...
Q1. Make Array Elements Equal to Zero | Easy | LeetCode Weekly Contest
前言 這算是第一次做 LeetCode Weekly Contest 的紀錄,今天是心血來潮上來打,所以準備考的時候只剩下沒多少時間,但我還是菜雞,因此就專攻第一題試水溫,寫完後就停止 題目敘述 題目難度: Easy 題目敘述: 題目給定一個整數陣列 nums,並且需要先選定一個起始點 curr,其中 nums[curr] =0。從起始點可以選擇往左走或往右走,接著可以重複下面的步驟: 若 curr 超出範圍 [0, n-1] 則步驟停止 透過加減 curr 值來實現向左和向右移動,curr 增加: 向右移動,curr 減少: 向左移動 移動後一旦 nums[curr] > 0 則 需要將 nums[curr] 值減一 反轉當前的移動方向 朝新方向前進一步 當移動結束時,所有元素值都歸零則被視為 Valid,請回傳總共有幾種 Valid 的走法 解法一開始的想法首先會需要迭帶題目給的陣列 nums,並且需要找到起始點,可能會有多個起始點,接著就是要從起始點開始向左或向有走來判斷是否 valid,在走訪過程中,一旦碰到大於0的值就會開始反向走,直到碰到另一端的...
最長遞增子序列 | Medium | 300. Longest Increasing Subsequence
題目敘述 題目難度: Medium 題目敘述: 題目給定一個整數陣列 nums,回傳所有可能的遞增子序列中最長的長度 子序列(Subsequence) 可由原先陣列中刪除多個元素來得到,但不可更動其元素順序,其中遞增子序列代表元素由左至右數字漸增 Ex. [5,8,3,2,4,5,9,15,7,20]其子序列包含:[5,8,4,5,20] 非遞增子序列[2,4,9,15] 遞增子序列[15,7,20] 非遞增子序列[5,9,15,20] 遞增子序列 解法一開始的想法一開始的想法比較偏向暴力解,一開始先思考要怎麼手動找出遞增子序列,並且要找到最長的。 對於 nums = [10,9,2,5,3,7,101,18] 1234567i=0 [10,9]i=1 [10,2]i=2 [10,5]i=3 [10,3]i=4 [10,7]i=5 [10,101]i=6 [10,18] -> 遞增子序列,max_length = 2 接著就會是每一輪迭代 1234567891011121314151617181920212223i=0 [9,2]i=1 [9,5]i=2 [9,...
回文子字串 | Medium | LeetCode#647. Palindromic Substrings
題目敘述 題目難度: Medium 題目敘述: 給定字串 s,回傳 s 中有多少回文子字串,回文代表字串從前往後讀等於從後往前讀都是一樣的字串。 解法一開始的想法我的想法就是可以遞迴處理,每次可以讀取一段字串,之後用一個函數檢查是否是回文,如果是,就將字串加入結果列表, 12345678910111213s = "abc"a -> Check if palindromicab -> Check if palindromicabc -> Check if palindromicac -> Check if palindromicb -> Check if palindromicbc -> Check if palindromicc -> Check if palindromiclist = [a,b,c]return list.size() 但後續發現會有大量重複計算的問題,很容易會超時,因此改變成其他做法 我的解答錯誤做法1234567891011121314151617181920212223242526272...
兌換零錢 | Medium | LeetCode#322. Coin Change
題目敘述 題目難度: Medium 題目敘述: 給定一個整數陣列 coins,分別代表不同硬幣的面額,另外給定目標金額 amount,題目要求回傳,達到目標金額 amount 所需的 最少硬幣數量,如果 coins 中的面額無法達到目標金額就回傳 -1 解法一開始的想法首先假設今天陣列是 [1,2,5] 那對於 amount 每次可以選擇減1減2或減5,扣除完畢後下一輪又可以選擇要減1減2還是減5,直到最後如果 amount 為 0 則代表達到目標金額,如果扣除太多 amount < 0 就代表不能達到目標金額,這時候就需要回傳 -1。如果畫出這個想法的遞迴樹會像是下面這樣。 Step1 解法的遞迴樹 可以看到應該會有很多重複的計算,因此稍後也會有最佳化的空間在。 我的解答Step-112345678910111213141516int coinchangehelper(vector<int>& coins, int amount){ if(amount==0) return 0; if(amount <0) retu...
Kubernetes for DevOps 筆記 |【DevOps技能樹】
Basic解釋一下什麼是 Kubernetes 用於進行 容器編排和管理的平台,可用於容器的自動化部署和擴展 Kubernetes 的主要功能有哪些? Self-Healing: 使用 Health check 來檢查運行中的容器,並且做出對應行為 Ex.重啟容器 Load Balancing: 將請求分散給 cluster中不同的應用 Operations: Kubernetes 打包的應用程式可以使用Cluster的 API 來更新其狀態並根據 Event 和應用程式狀態變更觸發操作 Automated Rollout: 逐步對應用更新,並且在出現問題時可以Rollout Scaling: 基於自定義的條件進行水平擴展 Secrets:可用一種以私有方式儲存使用者名稱、密碼和服務端點的機制,而且並非每個使用Cluster的使用者都可以查看 可以用哪些方式來去跟 Kubernetes 的資源互動 可以用 kubectl 命令列工具去與 Kubernetes Cluster 進行互動。 在部署應用到 Kubernetes的時候,哪些 Kubernetes 物件最常使用到 D...
AWS for DevOps 筆記 |【DevOps技能樹】
Regions & AZsRegion: 一群橫跨多個不同地理位置的資料中心 Ex. us-east-1 Avaiable Zone(AZ): 每個 Region 下都有多個相互隔離的位置叫做AZ,一個AZ中可能會有一個或多個資料中心,具有獨立的網路系統以及供電。 us-east-1a, us-east-1b….etc Local Zone: 沒有實體的資料中心,通常會連接到某個AZ, Ex.台灣Local Zone 就是接到 ap-northeast-1,旨在提供服務給 edge location 以降低延遲。 AWS Outposts: 部署在客戶 On Premises 的實體伺服器,提供本地存取AWS服務 IAM在 AWS 環境中用於進行存取控制的服務。可以管理哪些使用者可以有權限存取哪些資源。 Security Best Practices: 不要用 Root User 來進行日常業務,請建立對應的 User 給與適當權限再進行業務 在 IAM 中下面是常見得術語和關係圖:IAM User, IAM Group, IAM Role, Permission p...
Python for DevOps 筆記 |【DevOps技能樹】
Basic Data Typesdata type 可以透過 type() 來獲取物件或變數的 data type 123>>> var = "This is a string">>> print(type(var))<class 'str'> Variables x valid x_y valid x-y invalid Python 變數並非 Case Sensitive VAR 不等於 var 當你在輸入 x=1 的時候會發生什麼事? 其實就是創造一個整數物件其value為1 因此會在記憶體中分配一個固定大小的位址用來存放 1 而 x 這個名稱會指向用於該物件的 reference 123456>>> x =123>>> y =x>>> print(id(x))4298889392>>> print(id(y))4298889392 在 Python 中,變數是對物件的引用,這意味著變數名稱指向記憶體...
入室搶劫問題 | 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: int robHelper(vector<int>& nums, int start) { if (start >= nums.size(...
最小成本爬樓梯問題 | 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 (起點在第二,然後一次走跨兩階) 因此要目前需要找出的遞迴關係是,對於任意階梯的最小成本是多少 其實在這個問題中就可以發現這是會有重疊的子問題,並且之後有機會對重複計算進行最佳化,因此可以用某些 D...













