【力扣-每日小练】面试题62. 圆圈中最后剩下的数字(python)

面试题62. 圆圈中最后剩下的数字

题目链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/
难度:简单

题目描述

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

代码示例

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

我这个python代码实现的速度相对来说,太慢了,想用C语言再写一遍的,结果看到一个实现,真是佩服,听巧妙的
下面是C语言实现,参考别人的

int lastRemaining(int n, int m){
    int i, index = 0;
    for(i = 1;i <= n;i ++)
        index = (index + m) % i;
    return index;
}
/*
参考自:
作者:vladimir-chan
链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/cyu-yan-da-qia-by-vladimir-chan-23/
来源:力扣(LeetCode)
*/

你可能感兴趣的:(力扣练习-简单)