阅读背景:

面试45:圆圈最后剩下的数字(约瑟夫环)

来源:互联网 

1)

int LastRemaining(unsigned int n,unsigned int m)
{
	if(n<1||m<1)
	return -1;
	unsigned int i=0;
	list<int>numbers;
	for(i=0;i<n;++i)
		numbers.push_back(i);
	list<int>::iterator current=numbers.begin();
	while(numbers.size()>1)
	{
		for(int i=1;i<m;++i)
		{
			current++;
			if(current==numbers.end())
			current=numbers.begin();
		}
		list<int>::iterator next=++current;
		if(next==numbers.end())
		next=numbers.begin();
		--current;
		numbers.erase(current);
		current=next;
	}
	return *(current);
}


//时间复杂度O(mn),空间复杂度O(n)int LastRemaining(unsigned int n,uns



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: