150. Evaluate Reverse Polish Notation: 遇到符号就pop出前两个,运算然后push进stack,否则就直接push进stack
151. Reverse Words in a String: 好像没什么意义的题目
152. Maximum Product Subarray: 记录当前乘积的最大值和最小值, 最大值 是 max (前一个最大值当前值,前一个最小值当前值,当前值)最小值 是 min (前一个最大值当前值,前一个最小值当前值,当前值)关键点就在于要加入“当前值”,以前没想到这一点,处理0这种特殊情况的时候很难办
153. Find Minimum in Rotated Sorted Array: 这种题目画个图然后用二分法就好了
156. Binary Tree Upside Down: 这题当年我面试的时候遇到过,题意都没理解对,当然也没做出来,面试当然也跪了。这次用stack的方法手写出来了,但是还有一种用recursion的方法,直接做的时候花了十分钟没做出来,看了以前的答案,思考方向有点问题:在递归过程中考虑有两种一是先处理,再递归,二是先递归再处理,这题属于先递归,而且在先递归的时候要注意用递归去找new root,而不是手工创造(这样是用stack)而且这题tricky一点的地方在,要处理parent值的情况,然后用root.left来获取当前的要处理的点,不能用new_root来代替root.left因为new_root是最终要返回的点,而root.left在每一层循环的时候都会变。
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: 找到第一个不一样的点,处理一下,也就是说s[i] != t[i]的时候,去掉s[i] 或者去掉t[i]或者把s[i]置换成t[i],比较剩余的string
162. Find Peak Element: 这又是个二分法,比较简单
163. Missing Ranges: 这题的意义也不大,维护一个lower值,也就是下边界,如果连续的话,就增加lower的值,否则就记录一下,只是有点边界条件要考虑
165. Compare Version Numbers: 这题意义不大,split dot然后依次比较就好了
166. Fraction to Recurring Decimal: 这道数学题用hashtable,把每次进入除法的数记录下来,要重做一遍