Leetcode amazon 面試題系列(一)
最近在刷亞麻的面試題,然後順便想練一練python的技巧,所以就用python刷了一邊。然後mark一下以後可以複習。
leetcode 771.
大概就是給定兩個字串a 和b,問b 中出現了多少次a 的字元。
記錄一個python的用法:
def numJewelsInStones(self, J, S):
return sum(map(J.count, S))
這裡利用了 python 的幾個內建函式:map(), sum() 和count。 J.count 是一個函式,它的作用類似於遍歷整個J,然後map(func,S)就是統計S 中是否有出現J 中的字元,最後返回一個list [1,1, ... 0,0,0] 最後用sum來統計。
leetcode 617 merge two binary trees
大概就是給兩個二叉樹,然後如果有相同的節點就直接加起來。
記錄一個python 的寫法:
class Solution(object): def mergeTrees(self, t1, t2): if not t1 and not t2: return None res = TreeNode((t1.val if t1 else 0) + (t2.val if t2 else 0)) res.left = self.mergeTrees(t1 and t1.left, t2 and t2.left) res.right = self.mergeTrees(t1 and t1.right, t2 and t2.right) return res
主要就是 t1 and t1.left 這個寫的很簡潔。
leetcode 682 baseball game
一個模擬題
def calPoints(self, ops): history = [] for op in ops: if op == 'C': history.pop() elif op == 'D': history.append(history[-1]*2) elif op == '+': history.append(history[-1]+history[-2]) else: history.append(int(op)) return sum(history)
這裡主要就是list 的一些基本用法。 比如pop 可以把最後一個元素pop 掉,然後[-1] 是訪問最後一個元素,然後python 強大的型別轉換方式 int(op)
167 two Sum II
給一個已經排好序的陣列(升序)
然後給一個target,問陣列兩個加起來等於target 的數的index。
這裡介紹python 的兩種做法。
首先用首尾比較的方法。
給一個l 和 r 分別為第一個和最後一個元素。
然後比較 number[l] + number[r] 和target 的大小。
如果 小了就 l++, 不然就r --
注意loop的條件是 l < r
l,r = 0, len(numbers) - 1
while l < r:
s = numbers[l] + numbers[r]
if (s == target):
return [l+1, r+1]
elif s < target:
l = l + 1
else:
r = r - 1
另外一種方法藉助了python 的dict 的特性。
python in的用法:如果 有一個元素在dic 中會返回true,否則返回false
然後如果沒找到的話就把當前的元素加入到字典中。這裡注意返回的時候 i+1 在後面。因為這個時候我們num[i] 其實是較大的那個數。
dic = {}
for i, element in enumerate(numbers):
if target - element in dic:
return [dic[target-element]+1, i + 1]
dic[element] = i