题目:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。
分析:约瑟夫环问题,采用数学公式法比较简单,模拟法会超时。
说白了还是需要找到数学规律,与写代码没关系
,可以参考约瑟夫环
python代码:
class Solution:
def lastRemaining(self, n: int, m: int) -> int:
fn = 0
for i in range(n):
fn = (fn+ m ) % (i+1)
return fn
模拟法,时间复炸度是o(mn),代码为:
class Solution:
def lastRemaining(n: int, m: int) -> int:
circle = [i for i in range(n)]
while len(circle) >1 :
for j in range(m-1):
last = circle.pop(0)
circle.append(last)
circle.pop(0)
return circle[0]