欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

孩子们的游戏

程序员文章站 2024-01-03 13:29:28
...
  1. 这道题很简单,使用bo标志位和list数组进行双指针计算,
import java.util.List;
import java.util.ArrayList;
public class Solution {
    public int LastRemaining_Solution(int n, int m) {
    //当孩子为0时,返回-1
        if(n==0)return -1;
        //创建list和bo
        List<Integer> list=new ArrayList<>();
        boolean[] bo=new boolean[n];
        //初始化 
        int i=0;
        int ref=1;
        //终止条件list.size()==n-1
        while(list.size()<n-1){
            if(bo[i]==false){
            //数到的数达到m,则添加进链表,重新开始数数,否则继续数
                if(ref==m){
                    list.add(i);
                    bo[i]=true;
                    ref=1;
                }else{
                    ref++;
                }
            }
            i=i+1<n?i+1:0;
        }
        //当前不在链表中的元素
        for(int j=0;j<n;j++){
            if(!list.contains(j)){
                return j;
            }
        }
        return -1;
    }
}

上一篇:

下一篇: