剑指 Offer.62-II.和为s的连续正数序列
剑指 Offer.62 -圆圈中最后剩下的数字
题目链接
问题描述
0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。
例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
个人想法(模拟)
直接按照题意进行模拟,结果超时
官方解法(约瑟夫环问题)
这个问题是以弗拉维奥·约瑟夫命名的,他是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。约瑟夫斯把他的存活归因于运气或天意,他不知道是哪一个。 —— 【约瑟夫问题】维基百科
约斯夫环问题的关键点在于,最终剩下的数字的下标一定为0,利用这一特性,结合第一次与第二次的执行过程,总结出从n-1次还原出第n次对应元素下标的递推公式(idm+m-1)(mod n)
,通过动态规划,进行求解。
代码
1 | class Solution { |