• 圆圈中最后剩下的数字


    题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。

    Solution

    # -*- coding:utf-8 -*-
    class Solution:
        def LastRemaining_Solution(self, n, m):
            # write code here
            '''if n < 1 or m < 1:
                return -1
            last = 0
            for i in range(2, n+1):
                last = (last + m) % i
            return last'''
            if n < 1 or m < 1:
                return -1
            idList = [i for i in range(n)]
            j = 0
            while len(idList) > 1:
                for i in range(m):
                    j += 1
                    if j == len(idList):
                        j = 0
                if j > 0:
                    j -= 1 # 因为当报到第m个数时,j继续自加了一次
                    idList.pop(j)
                elif j == 0: # 当要删除的是最后一个节点时,需要特殊处理一下
                    idList.pop() 
            return idList[0]
    
  • 相关阅读:
    Callable的Future模式
    并发队列
    并发工具类
    线程池
    并发编程专题
    侧边栏:内有友链,分类等等
    脑残错误记录
    博主的OI流水账
    NOI2019游记
    NOI数论姿势瞎总结(Pi也没有)
  • 原文地址:https://www.cnblogs.com/binwone/p/6182714.html
Copyright © 2020-2023  润新知