• 圆圈中最后剩下的数


    题目描述

    每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)
     
    如果没有小朋友,请返回-1
    Python 代码
     1 # -*- coding:utf-8 -*-
     2 class Solution:
     3     def LastRemaining_Solution(self, n, m):
     4         # write code here
     5         if n < 1 or m < 1:  # m-1出列
     6             return -1
     7         if n == 1:
     8             return 0
     9         lst = [i for i in range(n)]
    10         i = 0
    11         while len(lst) > 1:
    12             if i + m - 1 < len(lst) - 1:
    13                 lst.pop(i+m - 1)
    14                 i = i + m - 1
    15             elif i + m - 1 == len(lst) - 1:
    16                 lst.pop(i + m - 1)
    17                 i = 0
    18             else:
    19 
    20                 lst.pop((i + m - 1) % len(lst))
    21                 i = (i + m - 1) % (len(lst)+1)
    22         return lst[0]

    注意点

    1.使用一个变量记录删除的索引

    2.考虑三种情况,下一个小于列表长度-1,等于列表长度-1,大于列表长度-1

    3.第三种情况,先删除元素,长度少了,再赋值时,当前长度要加1,取余计算后,才是删除的元素索引

  • 相关阅读:
    C#中的索引器
    ASP.NET中解决乱码问题
    System.Web.HttpContext.Current.Session为NULL值的问题?
    C# winForm 自定义鼠标样式的两种方法
    SQL中的排名函数
    VS2005打包项目(带卸载功能)
    HttpModule与HttpHandler
    怎样为你的SQLServer表选择索引 zt
    如何使用SQLDiag工具来追踪死锁错误 ZT
    几个性能调优相关的文章
  • 原文地址:https://www.cnblogs.com/shuangcao/p/12831632.html
Copyright © 2020-2023  润新知