题目描述
0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。
思路
1.模拟游戏过程,需要设置一个删除索引delIndex,初始值为0,每次与m相加,然后结果-1;即delIndex = delIndex+ m -1。
2.当delIndex超过数组长度时,说明要回到头部,我们直接取余即可。
3.当数组只剩下一个元素时,就是我们需要的答案。
Java代码实现
class Solution {
public int lastRemaining(int n, int m) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(i);
}
int delIndex = 0;
while(list.size()>1){
delIndex = delIndex + m - 1;
if(delIndex >= list.size()){
delIndex = delIndex % list.size();
}
list.remove(delIndex);
}
return list.get(0);
}
}
Golang代码实现
func lastRemaining(n int, m int) int {
delIndex := 0
numSlice := make([]int,n)
for i:=0; i<n; i++ {
numSlice[i] = i
}
for len(numSlice) > 1 {
delIndex = delIndex + m - 1
if delIndex >= len(numSlice) {
delIndex = delIndex % len(numSlice)
}
numSlice = append(numSlice[0:delIndex],numSlice[delIndex+1:]...)
}
return numSlice[0]
}
网友评论