题解 | #环形链表的约瑟夫问题#

环形链表的约瑟夫问题

http://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a

将1~n的元素保存到list中,定义一个函数,用来求解从iter位置出发走number步到达的位置,要注意达到list尾端的时候又重新回到list首端(成环). 然后每走number步删除相应的元素,直到只剩一个元素。

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @param m int整型 
     * @return int整型
     */
    list<int>::iterator get_iter(list<int>& lst,list<int>::iterator iter,int number){
        int num=number % lst.size();
        while(num>0){
            iter++;
            if(iter==lst.end()) iter=lst.begin();
            num--;
        }
        return iter;
    }
    
    int ysf(int n, int m) {
        list<int> lst{};
        for(int i=1;i<=n;i++) lst.push_back(i);
        int number=1;
        auto iter=lst.begin();
        while(lst.size()>1){
            int number=m-1;
            iter=get_iter(lst,iter,number);
            iter=lst.erase(iter);
            if(iter==lst.end()) iter=lst.begin();
        }
        return *lst.begin();
    }
};




全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务