剑指offer——圆圈中最后剩下的数字

1、如果通过环形列表去模拟圆圈的话,最后时间复杂度为O(mn),而且还需要一个辅助链表来模拟圆圈,空间复杂度为O(n)。

2、通过找出递推公式的方法,求得递推公式为


时间复杂度为O(n),空间复杂度为O(1)。

 

#include<stdio.h>

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

int main()
{
    printf("%d\n",LastRemaining(12,2));
    return 0;
}
posted @ 2014-09-06 16:16  啵啵那个臭  阅读(151)  评论(0编辑  收藏  举报