圆圈中最后剩下的数字(约瑟夫环问题)
问题简述
0 ~ n-1 这 n 个数字围成一个圆圈,从数字0开始,每次从这个圆圈里删除第 m 个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。
思路1:暴力解(超时)
思路2:递推
虽然我们不知道这个最终的值是哪个,但是可以确定的是在最后一轮删除后,这个值在数组中的索引一定是 0(此时数组中只有一个值了);
递推的目的就是每次还原这个值在上一轮所在的索引,直到第一轮,此时索引值就是目标值(因为
nums = [0..n-1]
);记
f(i)
表示倒数第i
轮时目标值所在的索引(i>=1
),显然有f(1) = 0
;递推公式:
f(i) = (f(i-1) + m) % i
(倒数第i
轮,数组的长度也为i
,所以是对i
取余)(f(i-1) + m) % i
关于递推公式的具体解析可以参`考「换个角度举例解决约瑟夫环」
Last updated