150. Evaluate Reverse Polish Notation: 遇到符號就pop出前兩個,運(yùn)算然后push進(jìn)stack,否則就直接push進(jìn)stack
151. Reverse Words in a String: 好像沒什么意義的題目
152. Maximum Product Subarray: 記錄當(dāng)前乘積的最大值和最小值, 最大值 是 max (前一個最大值當(dāng)前值,前一個最小值當(dāng)前值,當(dāng)前值)最小值 是 min (前一個最大值當(dāng)前值,前一個最小值當(dāng)前值,當(dāng)前值)關(guān)鍵點(diǎn)就在于要加入“當(dāng)前值”,以前沒想到這一點(diǎn),處理0這種特殊情況的時(shí)候很難辦
153. Find Minimum in Rotated Sorted Array: 這種題目畫個圖然后用二分法就好了
156. Binary Tree Upside Down: 這題當(dāng)年我面試的時(shí)候遇到過,題意都沒理解對,當(dāng)然也沒做出來,面試當(dāng)然也跪了。這次用stack的方法手寫出來了,但是還有一種用recursion的方法,直接做的時(shí)候花了十分鐘沒做出來,看了以前的答案,思考方向有點(diǎn)問題:在遞歸過程中考慮有兩種一是先處理,再遞歸,二是先遞歸再處理,這題屬于先遞歸,而且在先遞歸的時(shí)候要注意用遞歸去找new root,而不是手工創(chuàng)造(這樣是用stack)而且這題tricky一點(diǎn)的地方在,要處理parent值的情況,然后用root.left來獲取當(dāng)前的要處理的點(diǎn),不能用new_root來代替root.left因?yàn)閚ew_root是最終要返回的點(diǎn),而root.left在每一層循環(huán)的時(shí)候都會變。
class Solution(object):
def upsideDownBinaryTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
if not root or not root.left:
return root
new_root = self.upsideDownBinaryTree(root.left)
root.left.left = root.right
root.left.right = root
root.left = None
root.right = None
return new_root
161. One Edit Distance: 找到第一個不一樣的點(diǎn),處理一下,也就是說s[i] != t[i]的時(shí)候,去掉s[i] 或者去掉t[i]或者把s[i]置換成t[i],比較剩余的string
162. Find Peak Element: 這又是個二分法,比較簡單
163. Missing Ranges: 這題的意義也不大,維護(hù)一個lower值,也就是下邊界,如果連續(xù)的話,就增加lower的值,否則就記錄一下,只是有點(diǎn)邊界條件要考慮
165. Compare Version Numbers: 這題意義不大,split dot然后依次比較就好了
166. Fraction to Recurring Decimal: 這道數(shù)學(xué)題用hashtable,把每次進(jìn)入除法的數(shù)記錄下來,要重做一遍