写在前面的话: 补做题训练与题解。
做题时间: 2020年3月30日~2020年4月12日
记录: 总共道题,时间为min。
最近更新时间: 20200424

排序数组

链接:https://leetcode-cn.com/problems/sort-an-array/
类名:
考察点: 数组、排序
解题过程:力扣3月每日1题
这道题的动机代码AC通过是其次,主要是说明排序这个考点。选择、冒泡、插入、快排、归并、堆、希尔、桶、计数与基数。

圆圈中最后剩下的数字

链接:
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--;
        }