Algorithm做算法題屡拨,Review點評英文文章,Tip總結(jié)技術(shù)技巧娃胆,Share做技術(shù)分享遍希。每周打卡一次,這就是ARTS打卡里烦。
1. 做算法題
Leetcode 面試題 03.02. 棧的最小值
題目:
請設(shè)計一個棧凿蒜,除了常規(guī)棧支持的pop與push函數(shù)以外,還支持min函數(shù)胁黑,該函數(shù)返回棧元素中的最小值废封。執(zhí)行push、pop和min操作的時間復雜度必須為O(1)丧蘸。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
解題思路:
棧是一種操作受限的線性表漂洋,元素按照先進后出的順序操作。數(shù)組就是線性表,但可以隨機訪問刽漂,通過封裝壓棧(push)演训,彈棧(pop),讀棧(top)操作可以進行限制贝咙。題目要求能獲得棧的最小值样悟,在每次壓棧的時候判斷是否最小值,記錄下來庭猩。問題在于彈棧的時候窟她,把最小值彈出去了怎么辦?先判斷是否棧頂是最小值蔼水,如果是震糖,彈棧后重新計算最小值。題目要求操作的時間復雜度為O(1)趴腋,每次彈棧都計算最小值的話吊说,時間復雜度為O(n)。在極端情況下于样,棧頂是最小值疏叨,重新計算最小值時間復雜度O(n)。一般情況下穿剖,棧頂不一定是最小值蚤蔓,不用再找最小值,時間復雜度O(1)糊余。
解題代碼:
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.items = []
self.min_item = None
def push(self, x: int) -> None:
self.items.append(x)
if self.min_item is None or x < self.min_item:
self.min_item = x
def pop(self) -> None:
if len(self.items) > 0:
if self.items[-1] == self.min_item:
del self.items[-1]
if len(self.items) > 0:
self.min_item = min(self.items)
else:
self.min_item = None
else:
del self.items[-1]
def top(self) -> int:
return self.items[-1]
def getMin(self) -> int:
return self.min_item
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
2. 點評英文文章
閱讀《Concise Guide to Databases》第四章Relational Database秀又,主要介紹了關(guān)系型數(shù)據(jù)庫的基本概念,從數(shù)據(jù)庫設(shè)計范式到基礎(chǔ)SQL語法贬芥,使用案例講解概念是很好的方法吐辙,從具體的例子中更能感受到概念的本質(zhì)內(nèi)涵。
3. 技術(shù)技巧
介紹一款清單APP蘸劈,“滴答清單”昏苏。比手機自帶的備忘錄功能強大不少⊥可以導入手機備忘錄贤惯,平滑過渡。帶有打卡分析功能棒掠,每一份堅持都留下腳印孵构。內(nèi)置番茄鐘讓你專注每一分鐘。我覺得最強大的功能是烟很,能在通知欄顯示颈墅,而且常駐bar中蜡镶,完成或者暫緩點擊才能標記消失。以前用自帶的備忘錄恤筛,手一滑就沒有了官还。想知道時間都去哪了,滴答清單告訴你叹俏。
4. 技術(shù)分享
給自己的網(wǎng)站添加全文搜索妻枕,有個簡單的辦法僻族,docsearch中填寫網(wǎng)站地址和郵箱就完了粘驰。docsearch會自動爬取網(wǎng)站,構(gòu)建索引述么,反饋給預留的郵箱一段js代碼蝌数,把代碼插入網(wǎng)站中即可。詳細過程參考這里度秘。