【题目】0,1,。。。n排成一个圈,从0开始每次删除第m个数,求圆圈最后个数。
* 【思路】1 用数组模拟圆圈。当数到最后一个数即index==n时,令index==0 重头开始遍历;
* 当遇到已经被删除的数时nums[index]==-1,跳过继续;
* 【思路】1 用数组模拟圆圈。当数到最后一个数即index==n时,令index==0 重头开始遍历;
* 当遇到已经被删除的数时nums[index]==-1,跳过继续;
* 当走到指定m个数的时候,就将其删除掉,nums[index]=-1;
'
public class Solution {
//n代表圆圈个数,m代表每次删第m个数
public int LastRemaining_Solution(int n, int m) {
if(n<1 || m<1)
return -1;
int count=0;//计步器
int indexInNums=-1;//代表在圆圈中第几个数
//用数组模拟圆圈
int[] nums=new int[n];
int length=n;
while(length>0){
indexInNums++;
//到一圈尾部就重新开始
if(indexInNums==n)
indexInNums=0;
//
if(nums[indexInNums]==-1)
continue;
count++;
if(count==m){
nums[indexInNums]=-1;
count=0;
length--;
}
}
return indexInNums;
}
}