美文网首页
剑指 Offer-62-圆圈中最后剩下的数字

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

作者: 阿凯被注册了 | 来源:发表于2020-11-01 07:26 被阅读0次

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


    image.png

    解题思路1(暴力解):

    1. 例如a=[0,1,2,3,4],n=5,m=3,第一次删除数字为2,因为从0开始,所以删除数字2=(m-1)%len(a),此时n=len(a);
    2. 第二轮删除,需将删除元素的前面的数据后移到列表末尾,删除元素前面有多少个数字呢,正好等于删除元素的值,此时等于2;那么第二轮删除元素即(i+m-1)%len(a),此时的len(a)=4;
    3. 因此迭代判断条件即a的长度大于1,删除元素即i = (上一轮i+m-1)%len(a);
    4. 不断a.pop(i),直到剩余1个数,该方法耗时较长。

    Python3代码:

    class Solution:
        def lastRemaining(self, n: int, m: int) -> int:
            i, a = 0, list(range(n))
            while len(a) > 1:
                i = (i + m - 1) % len(a)
                a.pop(i)
            return a[0]
    

    相关文章

      网友评论

          本文标题:剑指 Offer-62-圆圈中最后剩下的数字

          本文链接:https://www.haomeiwen.com/subject/pjwkvktx.html