Algorithm做算法題势似,Review點(diǎn)評(píng)英文文章拌夏,Tip總結(jié)技術(shù)技巧,Share做技術(shù)分享履因。每周打卡一次障簿,這就是ARTS打卡。
1. 做算法題
LeetCode 234. 回文鏈表
題目描述:請(qǐng)判斷一個(gè)鏈表是否為回文鏈表栅迄。你能否用 O(n) 時(shí)間復(fù)雜度和 O(1) 空間復(fù)雜度解決此題站故?
示例:
示例 1:輸入: 1->2
輸出: false
示例 2:輸入: 1->2->2->1
輸出: true
解題思路:如果數(shù)組L存儲(chǔ)字符串的回文檢查,很簡單if L == L[::-1]
就能判斷是否回文毅舆。而題目中使用鏈表存儲(chǔ)西篓,最簡單的思路是把鏈表轉(zhuǎn)換為數(shù)組(python中是列表),再判斷是否回文憋活。這中方法要遍歷整個(gè)鏈表岂津,時(shí)間復(fù)雜度O(N),由于增加列表存儲(chǔ)悦即,空間復(fù)雜度O(N)吮成。具體實(shí)現(xiàn),參考代碼1辜梳。題目還有進(jìn)階部分粱甫,要將空間復(fù)雜度降為O(1),也就是不能使用額外的存儲(chǔ)空間冗美,只能在鏈表上做文章魔种。使用快慢指針,慢指針每次前進(jìn)1步粉洼,快指針每次前進(jìn)2步节预,一直到快指針知道鏈表尾部,慢指針正好指向鏈表中間位置属韧。慢指針繼續(xù)向后推移逆轉(zhuǎn)后半部分鏈表安拟。最后比較鏈表的前半部分和后半部分判斷是否回文。具體實(shí)現(xiàn)宵喂,參考代碼2糠赦。
解題代碼1:
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
L = []
while head is not None:
L += [head.val]
head = head.next
return L == L[::-1]
解題代碼2:
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
slow,fast,prev = head,head,None
while fast is not None:
slow = slow.next
fast = fast.next.next if fast.next is not None else fast.next
while slow is not None:
slow.next, slow, prev= prev, slow.next, slow
while head and prev:
if head.val != prev.val:
return False
head = head.next
prev = prev.next
return True
2. 點(diǎn)評(píng)英文文章
閱讀《Concise Guide to Databases》第二章,介紹了數(shù)據(jù)庫發(fā)展的歷程锅棕,數(shù)據(jù)庫隨著業(yè)務(wù)需求和技術(shù)更新的發(fā)展而發(fā)展出了關(guān)系型數(shù)據(jù)庫拙泽、面向?qū)ο髷?shù)據(jù)庫、NoSQL數(shù)據(jù)庫裸燎、數(shù)據(jù)倉庫顾瞻、云上數(shù)據(jù)庫服務(wù)、空間數(shù)據(jù)庫德绿、時(shí)序數(shù)據(jù)庫等等荷荤。文中詳細(xì)描述了這些數(shù)據(jù)庫的發(fā)展脈絡(luò),讓你對(duì)數(shù)據(jù)庫有更立體的認(rèn)識(shí)移稳。
3. 技術(shù)技巧
寫正則表達(dá)式之后應(yīng)該測試一下蕴纳,避免出現(xiàn)邏輯漏洞,介紹一個(gè)在線正則匹配工具个粱。這個(gè)工具不僅可以測試正則表達(dá)式古毛,還可以生成郵箱、ip都许、手機(jī)號(hào)等正則表達(dá)式稻薇。
4. 技術(shù)分享
參考官網(wǎng)說明使用Vuepress+Vercel實(shí)現(xiàn)免費(fèi)托管博客。注意先在本地跑通Vuepress梭稚,能正確訪問頁面颖低。在配置Vercel時(shí)注意,Vercel訪問github倉庫權(quán)限要打開弧烤,配置編譯生成時(shí)用npm init -y && npm i -D vuepress && npm run build
忱屑,以在云端部署vuepress環(huán)境在跑頁面出來。選擇一文件夾public為輸出暇昂,缺少的話會(huì)報(bào)錯(cuò)莺戒。代碼參考我的github。