649. Dota2 參議院
第一次嘗試 暴力
本來想統計字串裡面R和D的數目,發現想得太簡單了
“DDRRR”
雖然R多,但卻是D贏了,因為D先行ban了兩個R,還剩一個R ban了一個D,然後剩下那個D又把R給ban了,最後5個只剩下一個D所以是D贏
第二次嘗試 模擬
觀察上面的投票過程,只有當佇列中能夠投票的元素均相同的時候才能宣佈勝利,否則每個元素都會禁止離它最近的下一個敵對元素,那麼我們按照這個策略來模擬
- 使用r和d來統計當前分別能夠投票的元素個數,使用flag陣列標記flag[i]是否有投票權利
- 遍歷佇列,直到r或d為0,執行以下操作
- 從當前元素開始尋找最近的敵對元素,修改其flag[i]=false
- 返回不為0的元素
class Solution:
def predictPartyVictory(self, senate: str) -> str:
size = len(senate)
r,d = 0,0
for ch in senate:
if ch == 'R':
r+=1
else:
d+=1
flag = [True] * size
ind = 0
while r!=0 and d!=0:
if flag[ind]:
ch = senate[ind]
j = (ind+1)%size
while True:
if ch == 'R' and senate[j] == 'D' and flag[j] == True:
d-=1
break
if ch == 'D' and senate[j] == 'R' and flag[j] == True:
r-=1
break
j = (j+1)%size
flag[j] = False
ind = (ind+1)%size
# print(flag)
if r!=0:
return 'Radiant'
else:
return 'Dire'
通過了,但是效率很低,主要是往後找元素這個過程花費時間太長了
改進
我們只遍歷一輪,用r和d來表示當前擁有投票權的元素
- 如果當前元素是R,並且d==0,那麼r+=1,反之同理
- 如果當前元素是R,但是d!=0,那麼不做任何操作,反之同理
- 遍歷一輪後檢查r和d的數量
但是我們每個元素在一輪決策中只能投票一次,所以上面的遍歷還要改進,我們現在用兩個佇列r和d來儲存可以投票的元素
- 如果當前元素是R,d佇列為空,那麼入隊r佇列,否則d佇列出隊一個元素,儲存到res字串中等待下一輪投票,反之同理
- 取出res字串中的元素,重複上述遍歷
- 如果res為空,那麼我們檢查佇列元素,返回相應答案
class Solution:
def predictPartyVictory(self, senate: str) -> str:
size = len(senate)
r,d = [],[]
res = senate
while res!='':
senate = res
res = ''
for ch in senate:
if ch=='R':
if len(d)==0:
r.append('R')
else:
res+=d.pop()
else:
if len(r)==0:
d.append('D')
else:
res+=r.pop()
if len(r)!=0:
return 'Radiant'
else:
return 'Dire'
這次效率高了很多
相關文章
- LeetCode題解(0649):Dota2參議院(Python)LeetCodePython
- 【LeetCode刷題筆記-33 649:Dota2 參議院】LeetCode筆記
- 萬豪CEO將在美國參議院資料洩密小組面前作證
- 美國參議院將召開聽證會探討加密貨幣對選舉的影響加密
- 美參議院:俄羅斯黑客將目標對準所有50個州的選舉系統黑客
- 美國西弗吉尼亞州在參議院選舉中試行區塊鏈投票應用區塊鏈
- dota2怎麼改成國服 dota2國服啟動項設定程式碼最新
- dota2國服啟動項設定程式碼最新 dota2設定perfectworld啟動
- dota2國服啟動項怎麼設定 steam上dota2怎麼改成國服
- DOTA2自走棋遊戲分析(三)遊戲
- DOTA2自走棋遊戲分析(二)遊戲
- DOTA2自走棋遊戲分析(一)遊戲
- Dota2 國際服反和諧
- 領域驅動設計的參考建議 | heise Devdev
- 參加無伺服器會議後得到的資訊伺服器
- 力扣-1353. 最多可以參加的會議數目力扣
- 【講師系列】CSDN學院講師日常問題參考文件
- 菲律賓參議員提議涉及加密貨幣的犯罪活動要加重懲罰加密
- 3000元i3-8100配獨顯暢玩dota2配置推薦 暢玩DOTA2網遊
- 曠視南京研究院魏秀參:細粒度影像分析綜述
- 曠視南京研究院魏秀參:細粒度影象分析綜述
- 淺談DOTA2中的碰撞體積
- 【2倍】平安壽險雙倍獎勵活動,建議參加!
- 錯過《DOTA2》,暴雪現在後悔嗎?
- 美參議員表達了對加密礦場的憂慮,提議政府運用區塊鏈技術加密區塊鏈
- Win10無法登入dota2遊戲如何解決_win10 dota2遊戲登入不上解決教程Win10遊戲
- Qtum 量子鏈研究院:新型的隱私保護協議MimbleWimbleQT協議
- 阿里雲與信通院邀您參與雲原生安全使用者調研阿里
- 機器學習常見演算法效能比較與調參建議機器學習演算法
- 為什麼建議大家學習參加Python培訓?原因在這裡!Python
- dota2啟動失敗 初始化vulkan失敗
- 基於學習的快取一致性協議帶參驗證快取協議
- NFT鑄造智慧合約平臺開發方案部署原始碼建議參考原始碼
- 熱議 ▏明尼蘇達大學開發者被禁止參與Linux專案Linux
- 華中科技大學網路空間安全學院陳凱副院長一行蒞臨綠盟科技參觀考察
- win10系統開啟dota2提示已連線至DOTA2遊戲協調伺服器正在登陸中如何解決Win10遊戲伺服器
- c++形參實參C++
- 美國眾議院公佈 Equifax 資料洩露案調查報告UI