Alan's BLOG
  • archives
  • posts
  • tags
  • about
  • quote
  • search

leetcode 1089 - Duplicate Zeros

題目描述 給一個長度固定的list,將裡面出現的0做複製,並將剩餘的元素往右移 解題思路 使用單指針做遍歷,條件有兩個,都符合才做處理 假如當前元素為0 考慮最後一個元素也為0要小於list長度 Python class Solution: def duplicateZeros(self, arr: List[int]) -> None: """ Do not return anything, modify arr in-place instead. """ i = 0 while i < len(arr): if arr[i] == 0 and i + 1 < len(arr): arr.insert(i+1, 0) arr.pop() i += 1 i += 1 Golang func duplicateZeros(arr []int) { for i := 0; i < len(arr); i++ { if arr[i] == 0 && i+1 < len(arr) { arr = append(arr[:i+1], arr[i:len(arr)-1]....

2022-12-15 · 1 min · 83 words · Alan

leetcode 01. two sum

題目描述 給一個列表以及一個列表裡兩數相加起來的數,返回此兩數的列表位置 解題思路 可用字典結構當作存取位置用,並用遍歷將相減後還沒有出現的數存進字典裡,之後如果有遍歷到字典裡的數即可立馬返回位置 一樣使用雙指針,將list的index跟element分組做排序,因此新的list為由小到大,接著使用雙指針,一個指向頭一個指向尾,相加如果小於target則代表start太小,相加如果大於target代表end太大 Python 原本想用兩個for去解決 class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): left = nums[i+1:] for j in range(len(left)): if (nums[i] + left[j]) == target: return i, j+i+1 但提交後噴了time limit exceeded class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: dict = {} for i in range(len(nums)): if target - nums[i] not in dict: dict[nums[i]] = i else: return [dict[target - nums[i]], i] class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: list_ele_idx = [(ele, idx) for idx, ele in enumerate(nums)] # 主要讓ele在前,使sort生效,因此前面會寫成(ele, idx),讓ele可以排序 list_ele_idx....

2022-12-14 · 1 min · 142 words · Alan

leetCode 27. Remove Element

題目描述 給定一個數組nums和一個值val,你需要原地移除所有數值等於val的元素,返回移除後數組的新長度。 時間複雜度為O(1),不用考慮移除後的數組順序 解題思路 可先定義好一個指針,拿來加上長度,並用for判別是否為val,最後返回指針長度 使用雙指針,快的指針去負責遍歷整個list,慢的指針去紀錄是否有遇到題目給的值,是的話就跳過,最後返回slow Python class Solution: def removeElement(self, nums: List[int], val: int) -> int: ptr = 0 for num in nums: if num != val: nums[ptr] = num ptr += 1 return ptr class Solution: def removeElement(self, nums: List[int], val: int) -> int: fast = slow = 0 while(fast < len(nums)): if(nums[fast] != val): nums[slow] = nums[fast] slow+=1 fast+=1 return slow Golang func removeElement(nums []int, val int) int { fast, slow := 0, 0 for fast < len(nums) { if nums[fast] !...

2022-12-13 · 1 min · 97 words · Alan

Linux 列出登入資訊[last]

👨‍💻簡介 last 用途:列出目前與過去登入系統的使用者相關資訊 語法 last [OPTIONS] [num,time,name,tty] 參數 參數 說明 -f file 指定登入的日誌檔案(預設是/var/log/wtmp) -num 指定last顯示幾行資訊 -n num 與-num相同 -t time[YYYYMMDDHHMMSS] 顯示指定時間的登入資訊 -R 不顯示主機名 -a 在最後一列顯示主機名 -d 將非本地登入的使用者ip轉換成主機名 -F 顯示所有的登入和登出時間和日期 -i 顯示ip地址而不是主機名 -o 讀取舊的日誌檔案 -w 顯示使用者名稱和域名 -x 顯示系統關機資訊和執行級別的變化資訊 欄位說明 last # output 1 2 3 4 5 alan pts/2 192.168.56.1 Mon Oct 25 21:37 still logged in reboot system boot 3.10.0-1160.42.2 Mon Oct 25 21:16 - 22:39 (01:22) alan pts/0 192.168.56.1 Sun Oct 24 23:18 - 05:47 (06:28) reboot system boot 3....

2022-12-05 · 1 min · 145 words · Alan

Linux 顯示用戶資訊[id]

👨‍💻簡介 id 用途:顯示用戶的ID,以及所屬群組的ID。 語法 id [OPTIONS] userName 參數 參數 說明 -Z, –context 顯示當前用戶的安全上下文 -g, –group 顯示所屬群組ID -G, –groups 顯示所有群組ID -n, –name 顯示用戶 -r, –real 顯示實際ID -u, –user 顯示用戶ID 基本操作 顯示當前用戶訊息 id # output uid=1000(alan) gid=1000(alan) groups=1000(alan),996(vboxsf) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 顯示用戶群組id id -g # output 1000 顯示指定用戶訊息 id root

2022-12-02 · 1 min · 46 words · Alan

Linux 修改密碼[passwd]

👨‍💻簡介 passwd 用途:修改使用者密碼 語法 passwd [OPTIONS] username 參數 參數 說明 -k, –keep-tokens 保留未過期的驗證 token -d, –delete 刪除 named 帳號的密碼 (只有 root 可執行) -l, –lock 鎖住 named 帳號的密碼 (只有 root 可執行) -u, –unlock 解開 named 帳號的密碼鎖定 (只有 root 可執行) -e, –expire 讓 named 帳號的密碼過期 (只有 root 可執行) -f, –force 強制作業 -x, –maximum=DAYS 最大密碼有效期限 (只有 root 可執行) -n, –minimum=DAYS 最小密碼有效期限 (只有 root 可執行) -w, –warning=DAYS 用戶在密碼過期前收到警告的天數 (只有root可執行) -i, –inactive=DAYS 帳號在密碼過期後即將被停用前的天數 (只有root可執行) -S, –status 回報 named 帳號上的密碼狀態 (只有 root 可執行) –stdin 由 stdin 讀取新的 token (只有 root 可執行) 基本操作 修改使用者密碼 passwd myuser 顯示使用者密碼狀態 passwd -S myuser # output myuser PS 2021-11-26 0 99999 7 -1 欄位 範例 帳號名稱 myuser 密碼狀態,狀態包含鎖定密碼(LK)、無密碼(NP)與可用密碼(PS) PS 上次修改密碼時間 2021-11-26 密碼最短使用期限,單位為天 0 密碼最長使用期限,單位為天 99999 密碼過期前警告期間,單位為天 7 密碼過期後可使用的期間,單位為天 -1 刪除使用者密碼 passwd -d myuser 讓密碼過期,強制使用者更新密碼 passwd -e myuser # 下次登入時,就會跳出通知說要更改密碼 You are required to change your password immediately (root enforced) WARNING: Your password has expired....

2022-11-15 · 2 min · 214 words · Alan

k8s-reloader

👨‍💻簡介 有時候修改掛載的config檔,無法即時更新,需要重啟pod才會生效,為了解決這個問題,k8s-reloader因此而誕生,透過觀察掛載的configmap或是secret的變化自動對掛載的物件做滾動更新。 以下為在minikube環境下,透過掛載nginx-config檔並搭配reloader這個插件進行熱部署。 🔗github-repo : stakater/Reloader: A Kubernetes controller to watch changes in ConfigMap and Secrets and do rolling upgrades on Pods with their associated Deployment, StatefulSet, DaemonSet and DeploymentConfig – [✩Star] if you’re using it! (github.com) 🔰基礎介紹 運作原理 Reloader偵測所有資源變化,對有變化的資源使用SHA1計算資源的哈西值 Reloader查看是否有設定相關的annotation,並查看有設定annotation資源的特殊環境變量 對有設定annotation的資源比對其哈希值,如果環境變量中哈希值不同,則更新環境變量,如果環境變量不存在,則創建一個 環境變量名稱 ConfigMap:STAKATER_{configmap_name}_CONFIGMAP ,比如 ConfigMap 的名稱為 foo,則生成的環境變量的名稱為:STAKATER_FOO_CONFIGMAP。 Secret:STAKATER_{secret_name}_SECRET ,比如 Secret 的名稱為 foo,則生成的環境變量的名稱為:STAKATER_FOO_SECRET。 環境變量的值 使用 SHA1 計算的 ConfigMap 或者 Secret 的哈希值。 版本需求 k8s版本需 >= 1.9 安裝方式 使用Manifests安裝 kubectl apply -f https://raw....

2022-11-11 · 2 min · 373 words · Alan

Linux 修改時間[timedatectl]

👨‍💻簡介 timedatectl 用途:修改系統時間 語法 timedatectl [OPTIONS] command 參數 參數 說明 –no-pager 不將程序的輸出內容管道(pipe)給分頁程序 –no-ask-password 在執行特權操作時不向用戶索要密碼。 -H –host=[USER@]HOST 操作指定的遠程主機 -M –machine=CONTAINER 在本地容器內執行操作。 必須明確指定容器的名稱。 –adjust-system-clock 當使用set-local-rtc命令時,若使用了此選項,則表示根據RTC時間來更新系統時鐘。若未使用此選項,則表示根據系統時鐘來更新RTC時間 指令 指令 說明 status 顯示系統時鐘與RTC的當前狀態, 包括時區設置與網絡時間同步服務的狀態。 set-time TIME 將系統時鐘設爲指定的時間, 並同時更新RTC時間。 [TIME] 是一個形如 “2012-10-30 18:17:16"的時間字符串。 set-timezone ZONE 設置系統時區,也就是更新 /etc/localtime 軟連接的指向。 可以用下面的 list-timezones命令列出所有可用時區。 如果RTC被設爲本地時間, 此命令還會同時更新RTC時間。 list-timezones 列出所有可用時區,每行一個。 列出的值可以用作前述 set-timezone 命令的參數。 set-local-rtc BOOL 設爲 “no” 表示在RTC中存儲UTC時間; 設爲 “yes” 表示在RTC中存儲本地時間。應該盡一切可能在RTC中存儲UTC時間 set-ntp BOOL 是否開啓網絡時間同步。 設爲 “yes” 則啓用並啓動 systemd-timesyncd.service 服務, 設爲"no” 則停止並停用它 基本操作 顯示當前系統時間 timedatectl or timedatectl status 開啟網路時間同步服務 timedatectl set-ntp true 設定日期與時間 # 改時間和日期 timedatectl set-time "2021-11-01 10:10:00" # 只改日期 timedatectl set-time "2021-11-01" timedatectl set-time 20211101 # 只改時間 timedatectl set-time "10:10:00" timedatectl set-time 10:10:00 檢查時區 timedatectl list-timezones # 根據地理位置查看時區 timedatectl list-timezones | grep "Asia/B....

2022-11-10 · 1 min · 144 words · Alan

Linux 修改字串[sed]

👨‍💻簡介 sed(stream editor) 用途:用於處理文件,字串取代、複製、刪除等功能,進行處理時並不會改變當前的檔案,而是將處理過程存放在[模式空間]的緩衝區,結束目前的指令後輸出,接著再處理下一個指令直到結束 語法 sed [OPTIONS] script or inputfile 參數(常用) 參數 說明 -n, –quiet, –silent 沈默模式 -e script, –expression=script 直接在命令模式設定好script來進行編輯 -f script檔案, –file=script檔案 使用指定的script檔案來進行編輯 -i 修改檔案,常用於自動化腳本 動作 說明 a 新增,在指定的行數的「下一行」插入字串。未指定行數的話則是在「每一行」之後插入字串 c 取代,替換指定行數為預替換的字串 d 刪除,刪除指定的行。常與-i選項搭配,用來修改檔案時移除不需要的行 i 插入,與a相同,差別在於a指令是在指定行數之後插入,i是在指定行數之前插入 p 列印,通常搭配-n選項做使用,只列印出受影響的行數 s 取代,支持正則表達式,用來取代字串 flags 說明 [0-9] 數字表示只搜尋或者取代第 N 個數字所指示的那個樣板字串 g 全部取代 I 忽略大小寫 w 把符合的結果寫入檔案。和加了 -n 選項搭配 p 旗標的結果一樣。此旗標如果有和其它旗標搭配使用,必須放在最後面 基本操作 參數 搭配文件sed.txt I have a pen, I have an apple Ah Apple pen I have a pen, I have pineapple Ah Pineapple pen Apple pen Pineapple pen Ah Pen Pie Pineapple Apple Pen Pen Pie Pineapple Apple Pen 使用-n沈默模式 # 使用s取代每一行第一次出現的have修改成had sed -n 's/have/had/1p' sed....

2022-11-09 · 2 min · 252 words · Alan

Linux 篩選字串[grep]

👨‍💻簡介 grep 用途:查找文件內符合條件的字符串 語法 grep [-abcEFGhHilLnqrsvVwxy][-A<顯示行數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<範本樣式>][-f<範本文件>][--help][範本樣式][文件或目錄...] 參數 正規表示式選項 說明 -E, –extended-regexp 使用擴展正則表達式 -F, –fixed-strings 將樣式視為固定字符串的列表 -G, –basic-regexp 將樣式視為普通的表示法來使用 -P, –perl-regexp 將樣式視為perl的表示法來使用 -e, –regexp=PATTERN 指定字符串做為查找文件內容的樣式 -f, –file=FILE 指定規則文件,其內容含有一個或多個規則樣式,讓grep查找符合規則條件的文件內容,格式為每行一個規則樣式 -i, –ignore-case 忽略大小寫的差異 -w, –word-regexp 只匹配整個單詞,而不是字符串的一部分 -x, –line-regexp 只顯示全列符合的列 -z, –null-data 設定資料列結尾為空白位元組,非換列符號 -s, –no-messages 不顯示不存在或無匹配文本的錯誤信息 -v, –invert-match 將匹配的資料排除 參數 說明 -m, –max-count=NUM 在達到 NUM 符合項目後停止 -b, –byte-offset 在顯示符合樣式的那一行之前,標示出該行第一個字符的編號 -n, –line-number 標示匹配文字的行號 –line-buffered 輸出每列後清除輸出 -H, –with-filename 印出每個符合項目的檔名 -h, –no-filename 查詢多文件時不顯示文件名 –label=LABEL 以 LABEL 作標準輸入的檔名前綴 -o, –only-matching 只顯示每列中符合 PATTERN 的部分 -q, –quiet, –silent 不顯示任何信息 –binary-files=TYPE 設定二進制檔案為 TYPE 的檔案;TYPE 為 “binary”、“text” 或 “without-match” -a, –text 不要忽略二進制的數據 -I 不匹配二進制的東西 -d, –directories=ACTION 目錄操作的動作,讀取、遞歸、跳過 -D, –devices=ACTION 設置對設備的動作,FIFO和管道的操作,動作有,讀取、跳過 -r, –recursive 在指定目錄與其子目錄下所有的檔案中,搜尋指定的關鍵字 -R, –dereference-recursive 與-r相同,但遵循軟連結 –include=FILE_PATTERN 從特定的檔案中尋找關鍵字 –exclude=FILE_PATTERN 跳過匹配FILE_PATTERN 的文件和目錄 –exclude-from=FILE 跳過所有除FILE 以外的文件 –exclude-dir=PATTERN 跳過匹配PATTERN 的目錄 -L, –files-without-match 列出不匹配的文件名 -l, –files-with-matches 只列出匹配的文件名 -c, –count 只輸出匹配行的計數 -Z, –null 在搜尋的字串後面印出空字符 內容控制 說明 -B, –before-context=NUM 顯示前幾行 -A, –after-context=NUM 顯示後幾行 -C, –context=NUM, -NUM 顯示前後各幾行 –group-separator=SEP 使用A、-B或-C時,在組之間打印SEP而不是–線 –no-group-separator 使用A、-B或-C時,在組之間不打印seperator –color[=WHEN],–colour[=WHEN] 使用顏色標示的方式,將成功匹配的部分文字標示出來,方便使用者閱讀。顏色標示功能可以透過 --color=never、--color=always、--color=auto 這幾種參數來關閉、開啟或設為自動 -U, –binary 使用標誌高亮匹配字串 -u, –unix-byte-offsets 使用標誌高亮匹配字串 基本操作 指定文件查詢關鍵字 # 在file這個文件裡尋找test關鍵字 grep test file 透過匹配方式搜尋 # 在/etc/目錄下所有....

2022-11-09 · 2 min · 257 words · Alan
« Prev  Next  »
© 2024 艾倫的程式之旅 Powered by Hugo & PaperMod