zoukankan      html  css  js  c++  java
  • 面试题45:圆圈中最后剩下的数字

    题目描述

    0,1,…,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

    题目分析

    剑指Offer(纪念版)P229

    约瑟夫(Josephuse)环问题

    我们使用模板库中的双向链表std:list来模拟一个环形链表。

    PS:向量vector    线性顺序结构,相当于数组

       双向链表list     线性链表结构 

    代码实现

    int LastRemaining_Solution1(unsigned int n, unsigned int m)
    {
        if(n < 1 || m < 1)
            return -1;
    
        unsigned int i = 0;
    
        list<int> numbers;
        for(i = 0; i < n; ++ i)
            numbers.push_back(i);
    
        list<int>::iterator current = numbers.begin();
        while(numbers.size() > 1)
        {
            for(int i = 1; i < m; ++ i)
            {
                current ++;
                if(current == numbers.end())
                    current = numbers.begin();
            }
    
            list<int>::iterator next = ++ current;
            if(next == numbers.end())
                next = numbers.begin();
    
            -- current;
            numbers.erase(current);
            current = next;
        }
    
        return *(current);
    }
    

      

  • 相关阅读:
    shell 默认变量
    diff 实现
    AWK变量
    docker-bridge network
    docker--linux network namespace
    docker-container 操作
    docker--shell和Exec格式
    docker--build自己的image
    docker--container
    docker--删除container和image
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4978044.html
Copyright © 2011-2022 走看看