中搜网站提交,中国太空网站,静态网站建设流程怎么写,类似于淘宝的网站建设0,1,,n-1这n个数字排成一个圆圈#xff0c;从数字0开始#xff0c;每次从这个圆圈里删除第m个数字#xff08;删除后从下一个数字开始计数#xff09;。求出这个圆圈里剩下的最后一个数字。
例如#xff0c;0、1、2、3、4这5个数字组成一个圆圈#xff0c;从数字0开始每…0,1,···,n-1这n个数字排成一个圆圈从数字0开始每次从这个圆圈里删除第m个数字删除后从下一个数字开始计数。求出这个圆圈里剩下的最后一个数字。
例如0、1、2、3、4这5个数字组成一个圆圈从数字0开始每次删除第3个数字则删除的前4个数字依次是2、0、4、1因此最后剩下的数字是3。
示例 1
输入: n 5, m 3 输出: 3
示例 2
输入: n 10, m 17 输出: 2
解题思路
用 f(n, m) 表示从 n 个数中每次删除第 m 个数共删除了 n - 1 次最后留下的那个数的序号。
在还没开始删除元素的时候我们的序号和元素大小应该是一一对应的
元素
0 1 2 3 4
序号
0 1 2 3 4但是在删除第一个元素以后我们的序号就不一样了因为我们需要从上一个被删除的元素的下一个作为数组的首部
数字
0 1 3 4
序号
2 3 0 1但是我们发现删除一个元素后数组的首部元素就是被删元素的下个元素被删元素的位置我们可以知道是数组首部开始数起的第m%n个元素因此如果最后保留在元素在删除数组的序号为f那么它在原数组的位置就是m%nf因为数组是环形数组所以我们还需要m%nf%n
代码
class Solution {public int lastRemaining(int n, int m) {int f0;for (int i2;in;i){f(mf)%i;}return f;}
}