【力扣-毎日小练】面接问题62.円の最後に残った数字(python)


面接問題丸の最後に残った数字
タイトルリンク:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/難易度:簡単
タイトルの説明
0,1,...,n−1というn個の数字を1つの円に並べ,数字0から,この円からm番目の数字を毎回削除する.この丸に残っている最後の数字を求めます.
例えば、0、1、2、3、4の5つの数字が1つの円を構成し、数字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言語でもう一度書きたいと思って、結果は1つの実現を見て、本当に感心して、巧みな次は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)
*/