利用报数的性质确定本轮淘汰的人员的索引,将其删除后,进行下一轮报数,直到剩下最后一个人
import java.util.*;
public class Solution {
/**
*
* @param n int整型
* @param m int整型
* @return int整型
*/
public int ysf (int n, int m) {
// write code here
ArrayList<Integer> list = new ArrayList<Integer>();
// 先构造该数组序列
for(int i = 1; i <= n; i++){
list.add(i);
}
// 第一次从索引为0处进行报数
int id = 0;
// 直到剩最后一个人的时候停止循环
while(n > 1){
// 从开始报数的索引处向后数m-1个人即是被淘汰的人的索引处
id = (id + m -1) % n;
// 将被淘汰的人删除掉
list.remove(id);
// 将人数减1
n--;
}
// 最后剩下的一个人即是最终的获胜者
return list.get(0);
}
}
京公网安备 11010502036488号