1. 程式人生 > >Leetcode amazon 面試題系列(一)

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