剑指Offer62:圆圈中最后剩下的数字(Java)
程序员文章站
2022-06-17 16:13:17
...
题目描述:
解题思路:
这道题我们可以通过定义一个list集合去解决它。首先我们把所有的元素加入到list集合里,因为题目要求每次从n个数中删除第m个数,假如m是3,n是5,那么第一次删除的就是m-1下标的元素,而第二次删除的就是m-2下标开始数,第3个元素也就是m + m - 1下表的元素,但是因为此时下标已经越界了,此时我们可以通过取余去找到这个元素的下标,但是因为每次都会删除一个元素,n会不断减少,取余时n也要跟着减少才行。当list只剩最后一个,把那个元素取出来即可。
代码实现:
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 index = 0, j = 0;
while(list.size() > 1){
index = (index + m - 1) % (n - j);
list.remove((int)index);
j++;
}
return list.get(0);
}
}
执行结果:
推荐阅读
-
剑指offer:数组中只出现一次的两个数字(java版)
-
《剑指Offer》Java刷题 NO.40 数组中只出现一次的数字(数组、HashMap、位运算、异或)
-
剑指offer(Java实现)56 - 数组中只出现一次的两个数字
-
《剑指offer》 数组中只出现一次的数字(数组中只出现一次的两个数字)(Java)
-
【Java语言】剑指office系列之数组、哈希表---数组中只出现一次的数字
-
剑指 offer之数组中只出现一次的数字_java
-
《剑指offer》—— 40. 数组中只出现一次的数字(Java)
-
剑指offer_面试题:数组中重复的数字_Java实现
-
《剑指offer》—— 46. 圆圈中最后剩下的数(Java)
-
剑指offer62:圆圈中最后剩下的数字 python