課程3:stack,deque,heap的運(yùn)用
Expression Expand:利用stack來記錄暫不需要的信息
Trapping Rain Water: 找到每個(gè)點(diǎn)的左邊最大和右邊最大
Implement Queue by Two Stacks: stack的簡單應(yīng)用
Min Stack:stack的簡單應(yīng)用
Sliding Window Median:因?yàn)閜ython無法直接刪除heap里的元素,所以用lazy pop來解決
Trapping Rain Water II :用heap從四周朝中間找
Maximal Rectangle:這題是那道最大rectangle的擴(kuò)展,把每一行作為底邊來考慮當(dāng)前行可以形成的最大矩形的大小
Max Tree:stack保持單調(diào)性的應(yīng)用
Largest Rectangle in Histogram:保持單調(diào)遞增,就可以知道以當(dāng)前長度為高的矩形的左右邊界了,stack里存的是index
Data Stream Median:直接用兩個(gè)heap,比較簡單
Sliding Window Maximum:用一個(gè)deque保持window里遞減
Binary Tree Maximum Path Sum II:簡單的dfs
Heapify:對一半的值執(zhí)行一個(gè)siftdown操作,從len/2開始一直操作到0,這樣就可以使得最小值移動(dòng)到最上面,并且保證每個(gè)值的2i和2i+1的節(jié)點(diǎn)都比當(dāng)前值要大
K Edit Distance:比較粗糙的做法是用動(dòng)態(tài)規(guī)劃找出每個(gè)單詞到target的edit distance然后和k比較下
Expression Tree Build:利用stack找出左右節(jié)點(diǎn)
Convert Expression to Reverse Polish Notation:比較麻煩的地方在于確定每一個(gè)運(yùn)算符的base
課程4:按值二分和掃描線
Sqrt(x):比較基礎(chǔ)的按值二分
Maximum Average Subarray:這題的按值二分比較神奇,判定條件有點(diǎn)麻煩
Sqrt(x) II:同樣的按值二分,只是循環(huán)結(jié)束條件是start和end小于某個(gè)微小的數(shù)
Number of Airplanes in the Sky:很簡單的掃描線問題
Divide Two Integers :又一道用二分法思想的題
Find Peak Element:二分法基本題
First Bad Version:又一道基本題
Find Peak Element II:在matrix找到peak,每次可以丟掉左邊或者右邊,或者是上邊和下邊
Wood Cut:比較簡單的按值二分,判定條件是把每一個(gè)都除一下,看看要多少刀
Find the Duplicate Number:二分法,判定條件是數(shù)一數(shù)比它小的值的個(gè)數(shù)
Smallest Rectangle Enclosing Black Pixels:按照給出的pixels向上下左右二分,找到邊界