圆圈中最后剩下的数字

题目

  0、1…n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

  如0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3.

class Solution {
public:
    int lastRemaining(int n, int m) {
        if (n < 1 || m < 1) {
            return -1;
        }

        list<int> l;
        for (int i = 0; i < n; ++i) {
            l.push_back(i);
        }

        list<int>::iterator it = l.begin();
        while(l.size() > 1) {
            for (int i = 1; i < m; ++i) {
                ++it;
                if (it == l.end()) {
                    it = l.begin();
                }
            }
            list<int>::iterator it1 = ++it;
            if (it1 == l.end()) {
                it1 = l.begin();
            }
            l.erase(--it);
            it = it1;
        }
        return *it;
    }
};

 

posted on 2019-01-25 16:02  tianzeng  阅读(262)  评论(0编辑  收藏  举报

导航