圆圈中最后剩下的数
孩子们的游戏(圆圈中最后剩下的数)
https://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6?tpId=13&&tqId=11199&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
模拟一个环形链表,当报数到m-1的时候,就将对应下标的移除链表,然后继续从0开始报数到m-1,继续移除,知道剩下一个为止
public int LastRemaining_Solution(int n, int m) { if(n < 1 || m < 1) return -1; ArrayList<Integer> list = new ArrayList<>(); for(int i = 0; i < n; i++) list.add(i); int pre = 0; /*从0开始*/ while(list.size() > 1){ pre = (pre+m-1)%list.size(); /*在前一个移除数的基础上,报m-1次,就是移除数的下标,用取模模拟环*/ list.remove(pre); } return list.get(0); }
使用数学规律
public class Solution { public int LastRemaining_Solution(int n, int m) { if(n < 1 || m < 1) return -1; int last = 0; for(int i = 2; i <= n; i++){ last = (last+m)%i; } return last; } }
剑指offer 文章被收录于专栏
为刷过的每一道题都书写一篇题解,便于重复练习~