圆圈中最后剩下的数
我发现我太笨了,只能用循环队列解决!!!
解法一:
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;
}
}