写在前面的话: 多看书,整完论文,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--;
}
原文地址:https://www.cnblogs.com/ranh941/p/12598836.html
时间: 2024-10-11 23:28:04