剑指offer(46)圆圈中最后剩下的数(约瑟夫问题)

 

一 用双向链表模拟环来解决

import java.util.*;
public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        if(n < 1 || m < 1){
            return -1;
        }
        List<Integer> list = new LinkedList<Integer>();
        for(int i = 0;i < n;i++){
            list.add(i);
        }
        int current = 0;
        while(list.size() > 1){
            for(int i = 1;i < m;i++){
                current++;
                if(current == list.size()){
                    current = 0;
                }
            }
            list.remove(current);
            if(current == list.size()){
                current = 0;
            }
        }
        return list.get(current);
    }
}

 

二 递归

public int LastRemaining_Solution(int n, int m){
    if(n < 1 || m < 1){
        return -1;
    }
    return (LastRemaining_Solution(n - 1, m) + m) % n;
}

 

三 循环

public int LastRemaining_Solution(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;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
08-07 14:45
点赞 评论 收藏
分享
点赞 评论 收藏
分享
07-11 18:47
已编辑
门头沟学院 后端
在看数据的孤勇者很想...:如果你是在校硕士,六段大厂实习一眼假,假设一段实习两个月,硕一暑假,硕一寒假,大四暑假,大四寒假,大三寒假,大三暑假,哥们,你怎么卷吗,寒假基本两个月在企业实习不现实,所以你可能是日常实习,但是你不可能每段日常实习都是两个月吧,他们日常实习都是三个月起步这样,所以你往前推一下,一段日常实习,就三个月,敢情你大学生课都不上,全在实习吗?你自己问问自己,六段大厂实习,一点没学到,自己说出来会不会笑呀,不管学历,但凡有一段大厂实习都很牛逼了
投递米哈游等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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