【面试题45】约瑟夫环问题

来源:互联网 发布:老人去世六年无人知 编辑:程序博客网 时间:2024/06/05 02:26
【题目】0,1,。。。n排成一个圈,从0开始每次删除第m个数,求圆圈最后个数。
* 【思路】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;    }}

再见

0 0
原创粉丝点击