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

2015-07-24 05:32:10 · 作者: · 浏览: 8

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

?

?

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

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

?

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

?

代码:

?

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

#include 
  
   
#include 
   
     using namespace std; int LastRemaining (size_t n, size_t m) { if (n<1 || m<1) return -1; list
    
      numbers; for(size_t i=0; i
     
      ::iterator current = numbers.begin(); while (numbers.size() > 1) { for (size_t i=1; i
      
       ::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


?

?

?