标签:load remove 溢出 tps game style 防止 mic loading
1、数学解法就是通过倒推,求出队伍长度为n时,(n=1)的下标会变成什么。
class Solution { public int lastRemaining(int n, int m) { int ans = 0;//这个就是最后只留一人时,他的下标,队伍长为1时,下标为0 //我们开始倒推出当队伍长度为n时,这个人的下标, for (int i = 2; i <= n; i++) {//从2开始,2到n指的是队列的长度 ans = (ans + m) % i;//因为每次都会固定前移m,是它成为队首,防止溢出再取余
//移动其实就是一开始从队首开始后移了m个,现在移回去m个,就可以变成队首,然后是环要取余,也不用改变别的值 } return ans; } }
@Sweetiee??的小号 的图片
2、模拟
class Solution { public int lastRemaining(int n, int m) { ArrayList<Integer> que = new ArrayList<>(); for (int i = 1; i <= n; i++) { que.add(i);//先把每个人的下标存进去 } int start = 0; while (que.size() > 1) { //找到下一次的抛弃位置 int id = (start + m - 1) % list.size(); //id=start+m-1 是因为他们之间间隔了m个 //id-start+1=len->id=len+start-1 m就是这里的len list.remove(id);//把该位置上的数移除 start = id;//因为移除了一个前面的数,后面的数下标前移1,所以还是id,更新它 } return list.get(0); } }
标签:load remove 溢出 tps game style 防止 mic loading
原文地址:https://www.cnblogs.com/MYstery9293/p/14643845.html