剑指offer-46
孩子们的游戏(圆圈中最后剩下的数)
http://www.nowcoder.com/questionTerminal/f78a359491e64a50bce2d89cff857eb6
约瑟夫环。
模拟报数,做一个flag数组,如果报过数的就flag[i]=1。
当然数字太大这样就不行了。。。每次都可以预测下一个将会被消除掉的数字的位置,n%m。
public class Solution { public int LastRemaining_Solution(int n, int m) { if(n<=0){ return -1; } int[] flag = new int[n]; for(int i=0;i<n;i++){ flag[i] = 0; } int n2 = n; int i = -1; int j = 0; while(n2>1){ i++; if(flag[i%n]==1){ continue; } if(j==m-1){ flag[i%n]=1; j=0; n2--; }else { j++; } } for(i=0;i<n;i++){ if(flag[i]== 0){ return i; } } return 0; } }