剑指 Offer 62: 约瑟夫环问题中的最后一个数字
发布时间
阅读量:
阅读量
源自《剑指 Offer》中的第62题:环状结构中的最后一个存活者
题目描述
将这些0,1,\cdots,n-1数值排列成一个环形序列,在起始点位于0的位置时开始操作;按照每轮删除当前的第m个元素的原则进行循环移除(即每次移除后均从下一个未被移除的元素位置重新开始计数)。通过此过程最终能够确定该环形序列中最后残留的元素
例如,在编号为0到4的五个连续整数构成的环状结构中,按照每隔两个数字删除一个的位置进行操作时,前四个被移除的编号依次为2、0、4、1;经过上述操作后最终留下的原始编号为3。
示例 1:
输入: n = 5, m = 3
输出: 3
示例 2:
输入: n = 10, m = 17
输出: 2
解题思路
((n-1)个元素情况下,剩余元素的下标 + m) % n
public int lastRemaining_1(int n, int m) {
return f(n,m);
}
public int f(int n,int m){
if (n == 1)
return 0;
int x = f(n - 1,m); // 查找 有n-1个数字 的情况下,删除第m个数字 的剩余元素
return (
全部评论 (0)
还没有任何评论哟~
