【筆記】和左程雲學習刷題
阿新 • • 發佈:2021-07-25
目錄
一、思路總結
二、B站地址
三、相關書籍
四、《程式設計師程式碼面試指南》Python實現
一、思路總結
學習其刷題習慣和思考思路
1. 案例一:水王數問題
1 # coding:utf-8 2 """ 3 輸入:一個列表,如果列表中有一個數出現的頻率超過總個數的一半,則稱其為水王 4 輸出:水王數,如果沒有則返回-1 5 要求:時間複雜度O(n),空間複雜度O(1) 6 例如:[3,2,1,2,3,3,3,4,3,3],返回 3 7 思路:每次從列表中取兩個不同的數刪掉, 8 1)如果沒有數剩下,則沒有水王,返回-1 9 2)最後留下來一個數,判斷其在列表中出現的頻率是否超過總數一半,是則為水王,否則沒有水王,返回-110 引申:總統選舉問題,每次兩張選票對比是否相同,候選人票數超過一半則選舉有效,再通過比對頻率找到總統 11 """ 12 class Solution : 13 def findShuiKing(self, alist) : 14 if len(alist) == 0 : 15 return -1 16 #候選人 17 candicate = 0 18 #血量,血量為0則無候選人,血量大於0則有候選人 19 HP = 0 20 for i in range(len(alist)) :21 #如果無候選人,則把當前數立為候選人,HP賦值為1 22 if HP == 0 : 23 candicate = alist[i] 24 HP = 1 25 #如果有候選人且候選人和當前數不等,則HP -1 26 elif alist[i] != candicate : 27 HP -= 1 28 #如果有候選人且候選人和當前數相等,則HP +1 29 else: 30 HP += 1 31 #如果最終的血量為0,則沒有候選人 32 if HP == 0 : 33 return -1 34 #如果最終有候選人,判斷候選人出現的頻率,超過一半則就是水王,否則不存在水王 35 if alist.count(candicate) > len(alist) // 2 : 36 return candicate 37 else : 38 return -1 39 40 s = Solution() 41 alist = [3,2,1,2,3,3,3,4,3,3] 42 res = s.findShuiKing(alist) 43 print(res)
二、B站地址
https://www.bilibili.com/video/BV1to4y1D7ka?p=2
三、相關書籍
《程式設計師程式碼面試指南》
四、《程式設計師程式碼面試指南》Python實現
部落格地址:https://blog.csdn.net/qq_34342154/article/details/77918297
程式碼地址:https://github.com/Liwenbin1996/Data_Structures_and_Algorithms