LeeCode 1832 找出遊戲的獲勝者

2022-10-10 18:18:14 字數 1009 閱讀 8105

題目描述:

共有 n 名小夥伴一起做遊戲。小夥伴圍成一圈,按順時針順序從1到n編號。確切地說,從第 i 名小夥伴順時針移動一位會到達第 (i+1) 名小夥伴的位置,其中 1 <= i < n,從第 n 名小夥伴順時針移動一位會回到第 1 名小夥伴的位置。

遊戲遵頊如下規則:

從第 1 名小夥伴所在位置開始

沿著順時針方向數 k 名小夥伴,計數時需要包含起始時位置的那位小夥伴。逐個繞圈進行計數,一些小夥伴可能會被數過不止一次

你數到的最後一名小夥伴需要離開圈子,並視作輸掉遊戲

如果圈子中仍然有不止一名小夥伴,從剛剛輸掉的小夥伴的順時針下一位小夥伴開始,回到步驟2繼續執行

否則,圈子中最後一名小夥伴贏得遊戲

給你參與遊戲的小夥伴總數 n,和乙個整數k,返回遊戲的獲勝者

標籤:動態規劃、約瑟夫環

建立模型

# 1   ->   n-k+1

# 2 -> n-k+2

# ...

# k -> 退出遊戲

# k+1 -> 1

# k+2 -> 2

# ...

# n -> n-k

由上面的規律可以得到這樣乙個關係式:

\[f(n) = (f(n - 1) + k - 1) \% n + 1

\]編碼實現

def findthewinner(n: int, k: int) -> int:

# 初始狀態, n=1時獲勝者就是該小夥伴

winner = 1

for i in range(2, n+1):

winner = (winner + k - 1) % n + 1 # 狀態轉移方程

return winner

rdesktop18 3編譯安裝

tar xvzf rdesktop 1.8.3.tar.gz cd rdesktop 1.8.3 安裝必要的庫 sudo apt get install libpcsclite dev libgssglue dev libssl dev 在chromebook的trusty中會出現乙個lib11的庫...

18 3 執行緒的宣告週期

1 概述 執行緒具有生命週期,其中包含7種狀態,分別為出生狀態 就緒狀態 執行狀態 等待狀態 休眠狀態 阻塞狀態和死亡狀態。出生狀態就是執行緒被建立時處於的狀態,在使用者使用該執行緒例項呼叫start 方法之前都處於出生狀態 當使用者呼叫start 方法後,執行緒處於就緒狀態 又被稱為可執行狀態 當...

搜尋SaaS公司Algolia融資1830萬美元

techcrunch報道,algolia拿到accel領投的a輪融資,其他投資者包括許多知名公司高管 parse的ilya sukhar,docker的solomon hykes,kevin rose和splunk的erik swan。如果你是hacker news的資深使用者,一定知道hn自己沒有...