码迷,mamicode.com
首页 > 编程语言 > 详细

编程算法 - 圆圈中最后剩下的数字(循环链表) 代码(C++)

时间:2014-07-13 16:15:24      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:mystra   编程算法   圆圈中最后剩下的数字   约瑟夫环   循环链表   

圆圈中最后剩下的数字(循环链表) 代码(C++)


本文地址: http://blog.csdn.net/caroline_wendy


题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0开始每次从这个圆圈里删除第m个数字.

求出这个圆圈里最后剩下的数字.


使用循环链表, 依次遍历删除, 时间复杂度O(mn), 空间复杂度O(n).


代码:

/*
 * main.cpp
 *
 *  Created on: 2014.7.13
 *      Author: Spike
 */

#include <iostream>
#include <list>

using namespace std;

int LastRemaining (size_t n, size_t m) {
	if (n<1 || m<1)
		return -1;
	list<size_t> numbers;
	for(size_t i=0; i<n; ++i)
		numbers.push_back(i);

	list<size_t>::iterator current = numbers.begin();
	while (numbers.size() > 1) {
		for (size_t i=1; i<m; ++i) {
			current++;
			if (current == numbers.end())
				current = numbers.begin();
		}

		list<size_t>::iterator next = ++current; //指向下一个
		if (next == numbers.end())
			next = numbers.begin();
		--current;
		numbers.erase(current);
		current = next;
	}
	return *(current);
}

int main(void)
{
    int result = LastRemaining(5, 3);
    std::cout << "result = " << result << std::endl;
    return 0;
}



输出:

result = 3




编程算法 - 圆圈中最后剩下的数字(循环链表) 代码(C++),布布扣,bubuko.com

编程算法 - 圆圈中最后剩下的数字(循环链表) 代码(C++)

标签:mystra   编程算法   圆圈中最后剩下的数字   约瑟夫环   循环链表   

原文地址:http://blog.csdn.net/caroline_wendy/article/details/37735653

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!