補充10道題(10/10)
1.求矩陣中最大數的個數
特別注意ops是2-d的
我的答案:
顯然,operation里面的列表和順序是沒有關系的,最大值和len(operation)有關,而最大值的個數和row 和col的最小值的乘積有關(因為最小,所以每一次+1都會參與)
別人的答案:
想法一樣,但是用zip來分開兩個列表。注意星號(*)的使用,表示收集輸入的參數,用元組來打包。首先*ops先解包,zip函數的參數輸入可以為0~n任意
*ops會將列表轉換成len(ops)長度的元組,作為函數參數傳遞進入zip,zip再將對應位置的元素提取組成新的元組輸出
比如ops=[[1,2,3],[4,5,6]] 則 *ops=(1,2,3),(4,5,6)
所以zip(*ops)== zip((1,2,3),(4,5,6))
2.求兩個列表的交集
利用內置的數據結構set能夠很容易的解決這個問題
假如不用內置的數據結構,可以考慮用hash 表,也就是用字典結構
方法一: 速度86.51%
方法二:速度 55%
方法三:33%
question 3:
我的答案:
question 4 刪除鏈表中的指定節點
給定一個鏈表,要求刪除鏈表值為指定值的節點
答案:典型的鏈表操作題目
別人的答案:用遞歸函數找到鏈表的最底端,再重新構建鏈表
首先在這道題目里面會因為鏈表太長而導致遞歸深度太大而超時,但是這種簡潔的代碼和遞歸思想很好,值得學習
question 5 比較兩個二叉樹?
給定兩個二叉樹,比較這兩個樹是不是相同的(結構,值)
我的答案:
直接利用遞歸方法檢查
qusetion 6 查詢一個二叉樹的最小深度
給定一個二叉樹,找出最小深度
我的答案:
利用遞歸思想,統計每一個節點的深度,有兩種情況 :
沒有子節點:深度為1? 有子節點:深度為2
將每個節點的深度取最小值加起來,就是最小深度了。
這里有一種情況是??? 2
???????????????????????????? /
???????????????????????? 1
那么對于節點 1,深度為1,對于節點2,左子節點深度為1,右子節點深度為0
假如返回 1+min(DR+DL)顯然結果為 1,不符合
像這種情況需要特別處理,對于這樣的不平衡節點,母節點的深度應該是自身加上最大的子節點深度
qusetion 7查詢一個二叉樹的最大深度
這類問題的相似:查找二叉樹的最大深度。顯然最大深度就沒有上面的問題了,對于不平衡的節點(一邊有子節點,一邊沒有子節點)肯定是取最大的子節點深度。所以任何情況都是去子節點的最大深度
答案:
question 8:字符串查找
給定兩個字符串,看是不是每一個字符都相等
我的答案:
簡單的hash表查詢
注意下面注釋掉的方法也是可行的,但是時間復雜度是 O(4N)
用字典查詢是 O(2N)
結果也顯示第一種方法(62ms)用的時間是第二種(112ms)的一半
別人的方法:
實際上思路是一樣的,但是代碼就簡潔很多
用了字典方法get來建立字符串統計,就避免了啰嗦的邏輯判斷,這點值得學習
question 9:最大回文長度?
給定一個字符串,返回最大可組成的回文長度
我的答案:
直接統計字符串,對于出現偶數次(2n)的,整體都能構成回文。對于出現奇數次(2n-1)的,有2n-1-1能構成回文,最后再只出現一次的字符中選一個出來,就是整體的回文了
question 10:翻轉鏈表