面试题六十二:圆圈中最后剩下的数字

 

在0-n-1这n个数中,每次从这个圈中删除第m个数字;
经典解法:链表;将模拟出环形链表结构后进行后进行相关的删除工作;直到只剩一个;也就是常规暴力解法;
创新解法:数学推导;
n>1时 f(n.m)=[f(n-1),m+m ] %n
n=1时候 f(n.m)==0;

 int f1(int  n,int m){
            if( n<1||m<1)
                return -1;
            int last=0;
            for(int i=2;i<=n;i++){
                last=(last+m)%i;    
            }
            return last;
        }

 

posted @ 2020-03-29 17:04  浪波激泥  阅读(201)  评论(0编辑  收藏  举报