码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-30 16:39:42      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:加油   arraylist   move   rem   get   integer   com   论文   程序   

写在前面的话: 多看书,整完论文,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周做题记录(力扣)

标签:加油   arraylist   move   rem   get   integer   com   论文   程序   

原文地址:https://www.cnblogs.com/ranh941/p/12598836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!