【牛客题解】 ——圆圈中最后剩下的数

圆圈中最后剩下的数

在这里插入图片描述
我发现我太笨了,只能用循环队列解决!!!

解法一:
class node
    {
  public:
        int num;
        node* next;
        node(int num)
        {
            this->num=num;
        }
    };
class Solution 
{
public:
    int LastRemaining_Solution(int n, int m)
    {
        if(n==0)
            return -1;
        node *head=new node(0);
        node* prev=head;
        node* cur=nullptr;
        for(int i=1;i<n;i++)
        {
            cur=new node(i);
            prev->next=cur;
            prev=cur;
        }
        cur->next=head;
        node* p=cur;
        for(int i=0;i<n-1;i++)
        {
            for(int j=0;j<m-1;j++)
            {
                p=p->next;
            }
            p->next=p->next->next;
        }
        return p->num;
    }
};
解法二:找规律,用公式
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;    
   }
}

原创文章 78 获赞 21 访问量 3536

猜你喜欢

转载自blog.csdn.net/Vicky_Cr/article/details/105609033