剑指offer45——圆圈中最后剩下的数字
2017-02-06 21:19
495 查看
题目要求
法一
法二
注意保持鲁棒性和list的用法即可。
左侧到右侧的映射是p(x)=(x−k−1)mod(n),再逆运算,从右到左,所以
f(n)=⎧⎩⎨0,(f(n−1,m)+m)mod(n),if n is 1if n > 1
法一
法二
题目要求
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)法一
用环形链表模拟class Solution { public: int LastRemaining_Solution(int n, int m) { if(n < 1 || m < 1) return -1; 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); } };
注意保持鲁棒性和list的用法即可。
法二
更高效的解法,分析其中的数学规律。在n个数字中,第一个被删除的是 k = (m-1)%n,再删除k后,剩下的n-1个数字为:0, 1 ,…… ,k-1 ,k+1 , ……, n-1(如果下标从0开始的话),然后新一轮的计数从k+1开始,即k+1为第一个数字,形成 k+1 , …… ,n-1 ,0 , 1 ,…… k-1左侧到右侧的映射是p(x)=(x−k−1)mod(n),再逆运算,从右到左,所以
f(n)=⎧⎩⎨0,(f(n−1,m)+m)mod(n),if n is 1if n > 1
class Solution { public: int LastRemaining_Solution(int n, int m) { if(n<1||m<1) return -1; int i = 1; int last = 0; for(i=2;i<=n;i++) { last = (last+m)%i; } return last; } };
相关文章推荐
- 【剑指offer系列】 圆圈中最后剩下的数字___45
- 剑指offer 面试题45—圆圈中最后剩下的数字(约瑟夫环)
- 《剑指Offer》学习笔记--面试题45:圆圈中最后剩下的数字
- 剑指offer 面试题45 圆圈中最后剩下的数字
- (剑指Offer)面试题45:圆圈中最后剩下的数字
- 剑指offer——面试题45:圆圈中最后剩下的数字(孩子们的游戏)
- 剑指Offer系列-面试题45:圆圈中最后剩下的数字
- 剑指Offer面试题45(Java版):圆圈中最后剩下的数字
- 《剑指offer》:[45]圆圈中最后剩下的数字(约瑟夫(Josephuse)环问题)
- 剑指offer系列之45:圆圈中最后剩下的数字
- 《剑指offer》面试题45 圆圈中最后剩下的数字(Java版本)
- 面试题45-------圆圈中最后剩下的数字(数字)
- 剑指offer---圆圈中最后剩下的数字
- 剑指Offer面试题45:圆圈中最后剩下的数字
- 剑指offer47题(孩子们的游戏:圆圈中最后剩下的数字)
- 【剑指offer】6.4抽象建模能力——面试题45:圆圈中最后剩下的数字
- 45:圆圈中最后剩下的数字
- 题目45:圆圈中最后剩下的数字(约瑟夫环)
- 剑指Offer 45圆圈中最后剩下的数字
- 剑指Offer面试题45圆圈中最后剩下的数字(约瑟夫环问题),面试题46求1+2+...+n