1. 程式人生 > 其它 >【筆記】和左程雲學習刷題

【筆記】和左程雲學習刷題

目錄

一、思路總結

二、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)最後留下來一個數,判斷其在列表中出現的頻率是否超過總數一半,是則為水王,否則沒有水王,返回-1
10 引申:總統選舉問題,每次兩張選票對比是否相同,候選人票數超過一半則選舉有效,再通過比對頻率找到總統 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