通知
此博客运行在jpress系统上,如果你喜欢此博客模板,请加QQ群:1061691290(whimurmur模板/jpress插件),免费下载使用

leetcode 剑指 Offer 62. 圆圈中最后剩下的数字

682人浏览 / 0人评论 | 作者:  | 分类: 剑指offer2  | 标签: 剑指offer2  | 

作者:

链接:http://proprogrammar.com:443/article/857

声明:请尊重原作者的劳动,如需转载请注明出处


剑指 Offer 62. 圆圈中最后剩下的数字

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

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

示例 1:

输入: n = 5, m = 3
输出: 3

示例 2:

输入: n = 10, m = 17
输出: 2

限制:

  • 1 <= n <= 10^5
  • 1 <= m <= 10^6

难度:简单;标签:无;编程语言:JAVA


我的解法

class Solution {
    public int lastRemaining(int n, int m) {
        List<Integer> circle = new LinkedList<>();
        for(int i = 0; i < n; i++){
            circle.add(i);
        }

        int div = 0;
        while(circle.size() > 1){
            div += m - 1;
            div %= circle.size();
            circle.remove(div);
        }

        return circle.get(0);
    }
}

比较好理解,一个一个数减,直到最后只剩一下数


其它解法

class Solution {
    public int lastRemaining(int n, int m) {
        int res = 0;
        for(int i = 2; i <= n; i++){
            res = (res + m) % i;
        }
        return res;
    }
}

看不懂(数学和字符串问题是真的恶心),看官方题解吧,大致就是递推,由n个数的情况删一个到n-1个数,然后知道n和n-1个数时的递推式,最后计算一下(但就是看不懂)


亲爱的读者:有时间可以点赞评论一下

点赞(2) 打赏

全部评论

还没有评论!