利用报数的性质确定本轮淘汰的人员的索引,将其删除后,进行下一轮报数,直到剩下最后一个人
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); } }