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

环形链表的约瑟夫问题

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();
    }
};




全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务