zoukankan      html  css  js  c++  java
  • 剑指offer---圆圈中最后剩下的数

    题目:圆圈中最后剩下的数

    要求:0,1,2...n-1 共n个数排成一个圆圈,从数字0开始,每次删除第m个元素,求这个圆圈里面剩下的最后一个元素


     如 n=5, m=3 的情况:0, 1, 2, 3, 4 组成一个圆圈,删除第三个元素 2,剩余元素为 0, 1, 3, 4,注意下次再删除元素时需要从上次删除元素的下一个元素开始计算,现在继续删除第三个元素,即删除0 ,这样依次进行下去,。。。删除4,。。。删除1,直到圈内只剩下一个元素,返回该元素。


     

    参见约瑟夫环问题

    class Solution {
    public:
        int LastRemaining_Solution(int n, int m)
        {
            
        }
    };

    解题代码:

    class Solution {
    public:
        int LastRemaining_Solution(int n, int m) {
            if(n < 1 || m < 1)
                return -1;
            list<int> numbers;
            for(int i = 0; i < n; i++)
                numbers.push_back(i);
            /**
             * 注意:
             * begin()指向首元素地址
             * end()指向最后一个元素的下一个地址
             */
            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();
                }
                // 这里注意更新完next指针的时候,不要忘记将current指向原位置
                list<int>::iterator next = ++current;
                current--;
                if(next == numbers.end())
                    next = numbers.begin();
                numbers.erase(current);
                current = next;
            }
            return *(numbers.begin());
        }
    };
  • 相关阅读:
    hadoop优点和缺点
    HDFS的基本shell操作,hadoop fs操作命令
    HDFS的java操作方式
    HDFS的体系结构和操作
    windows主机无法访问服务器
    用公共key实现无密码ssh
    hadoop2的伪分布部署
    lsof/fuser卸载挂载文件
    编译Apache Hadoop2.2.0源代码
    三十分钟掌握STL
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/9960061.html
Copyright © 2011-2022 走看看