圆圈中最后剩下的数字(约瑟夫环问题)
Last updated
Last updated
问题简述
思路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
关于递推公式的具体解析可以参`考「换个角度举例解决约瑟夫环」