2020年3月底到4月第1周做题记录(力扣)

Posted ranh941

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020年3月底到4月第1周做题记录(力扣)相关的知识,希望对你有一定的参考价值。

写在前面的话: 多看书,整完论文,deadline驱动,加油。
做题时间: 2020年3月30日~2020年4月5日
记录: 总共道题,时间为min。
最近更新时间: 202003230

圆圈中最后剩下的数字

链接:
https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/
类名:
考察点: 环、模拟
解题过程:力扣3月每日1题
题目的意思是用n个数字形成一个圆圈,数字范围为0到n-1,数字顺序放置,我自己理解起来费劲,可以这么理解,有n个椅子,形成一个圆圈,对椅子顺序编号为0到n-1,每个椅子编号后就不能更改。假设每轮移除开始时的椅子总数为total,我们从序号为x的椅子开始数椅子数,移除第m个椅子,序号表示该椅子在该轮中的顺序属于第几个且与编号无关,那么,每轮被移除的椅子序号为(开始椅子的序号x+ 移除椅子个数m-1)%此轮移除的椅子总数量total,总共需要移除n-1轮才能使得最终只剩下1个椅子。每一轮移除1个椅子,椅子总数total的初始值为n,每轮数的第一把椅子序号即x的初始值为0且x为上一轮被移除的椅子序号。程序模拟上述过程即可得到圆圈中最后剩下的数字。

        ArrayList<Integer> cir = new ArrayList();  
        //数字编号 
        for(int i=0;i<n;i++){
            cir.add(i);
        }     
        int begin = 0 ;
        int num = n;
        for(int i=0;i<=n-1;i++){
            if(num==1){//只剩一个数字
                ret = cir.get(0);
                break;
            }
            //移除元素的下标
            int removePos = (begin+m-1)%num;
            cir.remove(removePos);
            //移除元素后,新的计算开始值
            begin = removePos;
            num--;
        }    

以上是关于2020年3月底到4月第1周做题记录(力扣)的主要内容,如果未能解决你的问题,请参考以下文章

2020年3月做题记录

sql复制到月底的最新记录

计数排序再思考——从2020年1月第16题谈起

力扣-2020年最后一次登录

每周总结:2020年01月第1周

2020年2月第三周市场分析和执行策略